/************************************************************* /* Copyright (C), 2014-2020, lyfz. Co., Ltd. /* 文件名: IClientImpl.h /* 作者: Jeff.w /* 创建日期: 2014-08-07 /* 版本号: V1.0 /* 描述: 核心层底,客户端与服务端通信接口 /* 其它: /* 主要类模块: /* 历史修改记录: /* 作者 时间 版本 描述 /* Jeff.w 14/08/07 1.0 创建这个模块 ***************************************************************/ #ifndef __ICLIENT_IMPL_HEADER__ #define __ICLIENT_IMPL_HEADER__ #pragma once #include #include //#pragma warning(push) //#pragma warning(disable:4995) //#pragma warning(pop) #include "CritSection.h" #include "SocketHandle.h" #include "SocketClientImpl.h" #include "Client2SrvType.h" #if 1 #define RemoteSvr _T("lijiafz.vicp.net") #else #define RemoteSvr _T("192.168.1.31") //#define RemoteSvr _T("192.168.1.223") #endif class IClientImpl : public ISocketClientHandler { typedef SocketClientImpl CSocketClient; friend CSocketClient; public: IClientImpl(); ~IClientImpl(); void StartReConnectSrvThread(); static DWORD WINAPI ReConnectSrvThread(LPVOID pInstance); protected: virtual void OnThreadBegin(CSocketHandle* pSH); virtual void OnThreadExit(CSocketHandle* pSH); virtual void OnDataReceived(CSocketHandle* pSH, const BYTE* pbData, DWORD dwCount, const SockAddrIn& addr); virtual void OnConnectionDropped(CSocketHandle* pSH); virtual void OnConnectionError(CSocketHandle* pSH, DWORD dwError); protected: int m_nMode; // IPV4 或 IPV6 int m_nSockType; // UDP 或 TCP // 连接的服务器地址; TCHAR m_SvrAddr[MAX_PATH]; // 连接的服务器端口; TCHAR m_SvrPort[MAX_PATH]; // 线程句柄; HANDLE m_hReConnectSrvThreadHandle; // 线程退出句柄; HANDLE m_hRunObject; void _cdecl AppendText(LPCTSTR lpszFormat, ...); void GetAddress(const SockAddrIn& addrIn, CString& rString) const; bool GetDestination(SockAddrIn& addrIn) const; bool SetupMCAST(); public: BOOL m_bRecevie; // 是否已接收服务器的返回; BOOL m_bStopbeat; // 是否心跳包; BOOL m_bSocket; // 套接字是否打开; CSocketClient m_SocketClient; BOOL Initialize(); BOOL ConnectServer(LPCTSTR strAddr, LPCTSTR strPort); void net_CloseSocket(); void SendMsg(void *pMsg,const int nLen); BOOL SolveDBError(); public: // .用户登陆服务器请求; BOOL LoginRemoteSvrRequest(); BOOL LoginLocalSvrRequest(); // .用户登陆服务请求,服务器的响应返回; void LoginRemoteSvrResponse(void *pLoginResult); void LoginLocalSvrResponse(void *pLoginResult); // .客户端登陆后,聊天数据请求; BOOL ChatRemoteSvrMessageRequest(void *szDataBuf, int nDataLen); BOOL ChatLocalSvrMessageRequest(void *szDataBuf, int nDataLen);//ChatLocalSvrMessageRequest // .客户端登陆后,聊天数据请求,服务端的响应返回; void ChatRemoteSvrMessageResponse(void *pResponse); void ChatLocalSvrMessageResponse(void *pResponse); void DataToArray(IN BYTE *pData, IN CONST DWORD &dwLength, IN CArray*List1array); public: DWORD m_dwCurRecive; // 当前接收的字节; DWORD m_dwSumRecive; // 总接收的字节; BYTE *m_pRecivebuf; // 接收的缓存; DWORD m_dwSendCode; SENDHEAD m_tSendhead; ////////////////////////////////////////////////////////////////////////// public: void *m_pContext; LPTRANSPORT_EVENT m_eventHandler; INT Transport_Init(){ return CSocketHandle::InitLibrary(MAKEWORD(2, 2)); } INT Transport_UnInit(){ return CSocketHandle::ReleaseLibrary(); } INT net_OpenSocket( IN CONST INT& nType, IN CONST DWORD& dwPort, IN LPTRANSPORT_EVENT eventHandler, void *pContext ); INT net_Connect(IN LPCTSTR strAddr, LPCTSTR strPort); DWORD net_Send(IN void *pHeader, IN void *pMessage, IN CONST unsigned long ulDataLen); }; #endif