Server模塊如果僅僅作為一個lib包裝出來自然不是最好,雖然可在c++工程很容易使用,效率也比較高,但要使用到其他語言上去就沒有辦法,如果包裝一下自然是最好的,但如何包裝呢,包裝成一個什么樣子也是很重要的,最常見的包裝自然是包裝成一個dll,輸出一些接口,其他上層模塊在該接口的基礎(chǔ)上使用。最簡單的包裝一般可輸出如下一些接口,
Public IServer:
{
Virtual void StartServer(LPCTSTR ports, LPCTSTR udpoorts, int iothreads, int syncthreads, int asyntchreads);
Virtual void StopServer();
Virtual IClient *CreateClient();
Virtual void CloseClient(IClient *);
Virtual void OnCloseClient(IClient *);
Virtual void OnConnectClient(IClient *);
Virtual void PostSyncEvent(DWORD event, WPARAM wParam, LPARAM lParam)
Virtual void PostAsyncEvent(DWORD event, WPARAM wparam, LPARAM lParam);
Virtual void OnAsyncEvent(DWORD event, WPARAM wParam, LPARAM lParam);
Virtual void OnSyncEvent(DWORD event, WPARAM wParam, LPARAM lParam);
Virtual void OnTimer(UINT uid);
Virtual void AddTimer(UINT uid, DWORD tk1, DWORD duetk);
};
Public IClient
{
Virtual bool SendData(void *pdata, int len);
Virtual bool SendFile(LPCTSTR lpfilename);
Virtual bool SendFile(HANDLE hFile);
Virtual bool SendMsg(PKHEAD *ph);
Virtual bool SendMsg(PKHEAD *ph, void *pdata, int len);
Virtual bool SendMsg(PKHEAD *ph, void *pdata, int len, byte encrypt, byte compress);
Virtual void DelayClose();
Virtual void OnDelayClose();
Virtual void OnClose();
Virtual void OnConnect();
Virtual void OnAsyncEvent(DWORD event, WPARAM wParam, LPARAM lParam);
Virtual void OnSyncEvent(DWORD event, WPARAM wParam, LPARAM lParam);
Virtual void PostSyncEvent(DWORD event, WPARAM wParam, LPARAM lParam);
Virtual void PostAsyncEvent(DWORD event, WPARAM wParam, LPARAM lParam);
Virtual void SetTag(DWORD wParam);
Virtual DWORD GetTag();
Virtual long GetId();
};
IServer *DllCreateObject();
等
通過結(jié)合LoadLibrary并提供一個類似DllCreateObject的形式可很容易的 模擬類com實現(xiàn),上層可很容易的是復(fù)用dll的實現(xiàn)。