123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #pragma once
- #ifndef P2PMODULE_EXPORTS
- #ifdef _WIN64
- #ifdef _DEBUG
- #pragma comment(lib, "P2PModuleX64D.lib")
- #else
- #pragma comment(lib, "P2PModuleX64.lib")
- #endif
- #else
- #ifdef _DEBUG
- #pragma comment(lib, "P2PModuleD.lib")
- #else
- #pragma comment(lib, "P2PModule.lib")
- #endif
- #endif
- #endif
- // 下列 ifdef 块是创建使从 DLL 导出更简单的
- // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 RESDATAOBJECT_EXPORTS
- // 符号编译的。在使用此 DLL 的
- // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
- // RESDATAOBJECT_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
- // 符号视为是被导出的。
- #ifdef P2PMODULE_EXPORTS
- #define P2PMODULE_API __declspec(dllexport)
- #define P2PMODULE_C_API extern "C" __declspec(dllexport)
- #else
- #define P2PMODULE_API __declspec(dllimport)
- #define P2PMODULE_C_API extern "C" __declspec(dllimport)
- #endif
- #include <winsock2.h>
- #include "CcosThread.h"
- #include "CcosLock.h"
- class P2PMODULE_API P2P_Module_Base : public Ccos_Thread, public CcosLock
- {
- protected:
- char *m_pszMessageBuff;
- DWORD m_MessageBuffSize;
- PVOID m_pMainDevBus;
- char *m_pszIpAddress;
- char *m_pszLocalBusId;
- char *m_pszRemoteBusId;
- WORD m_Port;
- bool m_AsServer;
- SOCKET Socketfd;
- SOCKET m_SocketTarget;
- HANDLE m_ConnectionReady;
- //send block
- bool SendBlob(SOCKET &sck, const char *pMsg, const char *pBlock, DWORD size,bool Sync = false);
- bool ReadBlobSync(SOCKET &sck, char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);
- bool ReadBlob(SOCKET &sck, char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);
- public:
- P2P_Module_Base();
- ~P2P_Module_Base();
- //init
- void InitP2P(const char *pszIp, const char *pszLocalBusId, bool AsServer, PVOID pParent);
- //connect
- virtual bool ConnectP2P();
- //disconnect
- virtual void Disconnect();
- //check line
- virtual bool IsConnected();
- //do last quit
- virtual void Quit();
- bool IsTargetBusId(const char *pszTargetBusId);
- //callback
- virtual void OnBlob(char *pMsg, unsigned char *pData, DWORD size);
- virtual bool Exec();
- bool SendRaw(SOCKET &sck, const char *pData, DWORD size,bool Sync = false);
- bool ReadRawSync(SOCKET &sck, char *pszBuff, DWORD ExpectedSize);
- bool ReadRaw(SOCKET &sck, char *pszBuff, DWORD ExpectedSize);
-
- virtual bool SendBlob(const char *pMsg, const char *pBlock, DWORD size);
- //virtual bool ReadBlob(char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);//对外不公开,没用
- };
- class P2PMODULE_API P2P_Module_Server : public P2P_Module_Base
- {
- DWORD m_HeartBeatTimeout;
- public:
- P2P_Module_Server();
- ~P2P_Module_Server();
- //connect
- virtual bool ConnectP2P();
- //disconnect
- virtual void Disconnect();
- virtual void Quit();
- virtual bool IsConnected();
- //callback,one way to client no receive from anyone
- //virtual void OnBlob(char *pMsg, char *pData, DWORD size);
- virtual bool Exec();
- int TryInit();
- int TryAccept();
- int TryCheckConnection();
- virtual bool SendBlob(const char *pMsg, const char *pBlock, DWORD size);
- };
- class P2PMODULE_API P2P_Module_Client : public P2P_Module_Base
- {
- char *m_pszMsgBuff;
- unsigned char *m_pszBlockBuff;
- public:
- P2P_Module_Client();
- ~P2P_Module_Client();
- bool TryConnectServer();
- //connect
- virtual bool ConnectP2P();
- //disconnect
- virtual void Disconnect();
- //send block,one way to client no send to anyone
- //virtual bool SendBlob(char *pMsg, char *pBlock, DWORD size);
- //callback
- //virtual void OnBlob(char *pMsg, char *pData, DWORD size);
- virtual bool Exec();
- };
|