ecere: Initial Emscripten support
[sdk] / ecere / src / net / dcom.ec
index ac5a6df..a2b4366 100644 (file)
@@ -1,3 +1,5 @@
+#define _Noreturn
+
 namespace net;
 
 #if defined(__WIN32__)
@@ -6,7 +8,6 @@ namespace net;
 #define String _String
 #include <winsock.h>
 #undef String
-static WSADATA wsaData;
 
 #elif defined(__unix__) || defined(__APPLE__)
 
@@ -39,6 +40,8 @@ typedef struct in_addr IN_ADDR;
 import "network"
 import "List"
 
+#if !defined(__EMSCRIPTEN__)
+
 // SERVER
 
 static enum DCOMPacketType
@@ -154,7 +157,7 @@ public:
          int callID = nextCallID++;
          DCOMServerSocket socket = serverSocket;
          DCOMServerSocket processingSocket;
-         unsigned int size = (uint)&((CallVirtualMethodPacket)0).args + argsBuffer.size; // sizeof(class CallVirtualMethodPacket) + virtualsBuffer.size - 1;
+         unsigned int size = (uint)(uintptr)&((CallVirtualMethodPacket)0).args + argsBuffer.size; // sizeof(class CallVirtualMethodPacket) + virtualsBuffer.size - 1;
          CallVirtualMethodPacket packet = (CallVirtualMethodPacket)new0 byte[size];
          VirtualCallAck ack = null;
 
@@ -200,7 +203,7 @@ public:
          {
             if(!serverSocket || !serverSocket.connected || !serverSocket.thread)
                break;
-            if(ack = VirtualCallAcknowledged(methodID, id, callID))
+            if((ack = VirtualCallAcknowledged(methodID, id, callID)))
                break;
 
             guiApp.Unlock();
@@ -361,7 +364,7 @@ class DCOMClientThread : Thread
 
             if(!hasReturnValue)
             {
-               size = (uint)&((MethodReturnedPacket)0).args;
+               size = (uint)(uintptr)&((MethodReturnedPacket)0).args;
                packet = (MethodReturnedPacket)new0 byte[size];
                packet.type = (DCOMPacketType)htoled((DCOMPacketType)dcom_MethodReturned);
                packet.size = size;
@@ -378,7 +381,7 @@ class DCOMClientThread : Thread
 
             if(hasReturnValue)
             {
-               size = (uint)&((MethodReturnedPacket)0).args + buffer.size; // sizeof(class MethodReturnedPacket) + buffer.size - 1;
+               size = (uint)(uintptr)&((MethodReturnedPacket)0).args + buffer.size; // sizeof(class MethodReturnedPacket) + buffer.size - 1;
                packet = (MethodReturnedPacket)new0 byte[size];
                packet.type = (DCOMPacketType)htoled((DCOMPacketType)dcom_MethodReturned);
                packet.size = size;
@@ -482,7 +485,6 @@ class DCOMClientThread : Thread
 
    void OnDisconnect(int code)
    {
-      int c;
       guiApp.Lock();
       thread.connected = false;
       guiApp.Unlock();
@@ -554,7 +556,6 @@ public class DCOMService : Service
    public bool Stop()
    {
       bool result = true;
-      DCOMServerSocket socket;
       thread.connected = false;
       result = Service::Stop();
       if(thread.started && GetCurrentThreadID() != (int64)thread.id)
@@ -606,7 +607,7 @@ public:
       socket = this, connected = true;
    };
 
-   bool Connect(char * server, int port)
+   bool Connect(const char * server, int port)
    {
       bool result = false;
       if(Socket::Connect(server, port))
@@ -675,8 +676,8 @@ public:
             case dcom_CallVirtualMethod:
             {
                CallVirtualMethodPacket callMethod = (CallVirtualMethodPacket)p;
-               VirtualMethodReturnedPacket packet;
-               unsigned int size = (uint)&((VirtualMethodReturnedPacket)0).args; // sizeof(class VirtualMethodReturnedPacket);
+               VirtualMethodReturnedPacket packet = null;
+               unsigned int size = (uint)(uintptr)&((VirtualMethodReturnedPacket)0).args; // sizeof(class VirtualMethodReturnedPacket);
                SerialBuffer buffer { };
                bool hasReturnValue = callMethod.hasReturnValue;
                int methodID = callMethod.methodID;
@@ -735,17 +736,17 @@ public:
    {
       if(thread)
          thread.connected = false;
-      answered = 2;
+      answered = true; //2;
    }
 
    dllexport bool CallMethod(unsigned int methodID)
    {
+      bool result = false;
       if(this && connected)
       {
-         bool result;
          CallAck ack = null;
          int callID = nextCallID++;
-         unsigned int size = (uint)&((CallMethodPacket)0).args + __ecereBuffer.size; // sizeof(class CallMethodPacket) + __ecereBuffer.size - 1;
+         unsigned int size = (uint)(uintptr)&((CallMethodPacket)0).args + __ecereBuffer.size; // sizeof(class CallMethodPacket) + __ecereBuffer.size - 1;
          CallMethodPacket packet = (CallMethodPacket)new0 byte[size];
          packet.type = (DCOMPacketType)htoled((DCOMPacketType)dcom_CallMethod);
          packet.size = size;
@@ -761,7 +762,7 @@ public:
          {
             if(!thread || !connected)
                break;
-            if(ack = CallAcknowledged(methodID, objectID, callID))
+            if((ack = CallAcknowledged(methodID, objectID, callID)))
                break;
             guiApp.Unlock();
 
@@ -782,9 +783,8 @@ public:
             delete ack;
             result = true;
          }
-         return result;
       }
-      return false;
+      return result;
    }
 
    ~DCOMClientObject()
@@ -816,3 +816,5 @@ public:
       sendingOut = false;
    }
 }
+
+#endif // !defined(__EMSCRIPTEN__)