+#define _Noreturn
+
namespace net;
#if defined(__WIN32__)
#define String _String
#include <winsock.h>
#undef String
-static WSADATA wsaData;
#elif defined(__unix__) || defined(__APPLE__)
import "network"
import "List"
+#if !defined(__EMSCRIPTEN__)
+
// SERVER
static enum DCOMPacketType
SerialBuffer buffer { };
}
-class CallAck : strict
+class CallAck : struct
{
public:
int objectID;
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;
- if(currentThreadID == serverSocket.thread.id)
+ if(currentThreadID == (int64)serverSocket.thread.id)
processingSocket = serverSocket;
else
{
Socket next;
for(processingSocket = serverSocket.service.sockets.first;
processingSocket;
- processingSocket = (DCOMServerSocket)processingSocket.next)
+ processingSocket = (DCOMServerSocket)next)
{
next = processingSocket.next;
- if(processingSocket.connected &&
- processingSocket.thread.id == currentThreadID)
+ if(processingSocket.connected &&
+ (int64)processingSocket.thread.id == currentThreadID)
break;
}
}
{
if(!serverSocket || !serverSocket.connected || !serverSocket.thread)
break;
- if(ack = VirtualCallAcknowledged(methodID, id, callID))
+ if((ack = VirtualCallAcknowledged(methodID, id, callID)))
break;
guiApp.Unlock();
static uint32 letohd(uint32 value)
{
- return GETLEDWORD((byte *)&value);
+ return GETLEDWORD((byte *)&value);
}
class DCOMServerThread : 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;
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;
Class runClass = eSystem_FindClass(__thisModule.application, createInstance.className + 4);
DCOMServerObject object;
int vid;
-
+
if(!_class)
_class = eSystem_FindClass(runClass.module, createInstance.className);
-
+
objects = renew objects DCOMServerObject[numObjects+1];
object = objects[numObjects] = eInstance_New(_class);
incref object;
object.serverSocket = this;
object.id = numObjects++;
- object.instance = eInstance_New(runClass);
+ object.instance = eInstance_New(runClass);
incref object.instance;
object.instance._vTbl = new void *[object.instance._class.vTblSize + 1];
object.instance._vTbl++;
void OnDisconnect(int code)
{
- int c;
guiApp.Lock();
thread.connected = false;
guiApp.Unlock();
- if(thread.started && GetCurrentThreadID() != thread.id)
+ if(thread.started && GetCurrentThreadID() != (int64)thread.id)
thread.Wait();
}
};
~DCOMService()
{
- if(thread.started && GetCurrentThreadID() != thread.id)
+ if(thread.started && GetCurrentThreadID() != (int64)thread.id)
thread.Wait();
}
public bool Stop()
{
- bool result;
- DCOMServerSocket socket;
+ bool result = true;
thread.connected = false;
result = Service::Stop();
- if(thread.started && GetCurrentThreadID() != thread.id)
+ if(thread.started && GetCurrentThreadID() != (int64)thread.id)
thread.Wait();
+ return result;
}
void OnAccept()
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))
packet.type = (DCOMPacketType)htoled((DCOMPacketType)dcom_CreateInstance);
packet.size = size;
CopyBytes(packet.className, "DCOM", 4);
- CopyBytes(packet.className + 4, _class.name + strlen("DCOMClient_"), len-4+1);
+ CopyBytes(packet.className + 4, _class.name + strlen("DCOMClient_"), len-4+1);
answered = false;
SendPacket(packet);
delete packet;
//guiApp.ProcessNetworkEvents();
// Process();
- if(GetCurrentThreadID() == thread.id)
+ if(GetCurrentThreadID() == (int64)thread.id)
Process();
else
thread.semaphore.Wait();
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;
{
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;
{
if(!thread || !connected)
break;
- if(ack = CallAcknowledged(methodID, objectID, callID))
+ if((ack = CallAcknowledged(methodID, objectID, callID)))
break;
guiApp.Unlock();
//guiApp.WaitNetworkEvent();
//guiApp.ProcessNetworkEvents();
//Process();
- if(GetCurrentThreadID() == thread.id)
+ if(GetCurrentThreadID() == (int64)thread.id)
ProcessTimeOut(0.01);
else
ecere::sys::Sleep(0.01);//thread.semaphore.Wait();
delete ack;
result = true;
}
- return result;
}
- return false;
+ return result;
}
~DCOMClientObject()
{
if(thread.started)
{
- if(GetCurrentThreadID() != thread.id)
+ if(GetCurrentThreadID() != (int64)thread.id)
thread.Wait();
}
acks.Free();
sendingOut = false;
}
}
+
+#endif // !defined(__EMSCRIPTEN__)