ServerSocket.h 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #pragma once
  2. #include <afxwin.h>
  3. //#include <atlbase.h>
  4. #pragma warning(push)
  5. #pragma warning(disable:4995)
  6. #include <list>
  7. #pragma warning(pop)
  8. #include "CritSection.h"
  9. #include "SocketHandle.h"
  10. #include "SocketServerImpl.h"
  11. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  12. #include "AsyncSocketServerImpl.h"
  13. #endif
  14. #include "BaseVar.h"
  15. namespace ServerSocket
  16. {
  17. typedef std::list<SOCKET> CSocketList;
  18. class CServerSocket :
  19. public CDialog,
  20. public ISocketServerHandler
  21. {
  22. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  23. typedef ASocketServerImpl<ISocketServerHandler> CSocketServer;
  24. #else
  25. typedef SocketServerImpl<ISocketServerHandler> CSocketServer;
  26. #endif
  27. friend CSocketServer;
  28. protected:
  29. // ISocketServerHandler
  30. virtual void OnThreadBegin(CSocketHandle* pSH);
  31. virtual void OnThreadExit(CSocketHandle* pSH);
  32. virtual void OnAddConnection(CSocketHandle* pSH, SOCKET newSocket);
  33. virtual void OnDataReceived(CSocketHandle* pSH, const BYTE* pbData, DWORD dwCount, const SockAddrIn& addr);
  34. virtual void OnConnectionFailure(CSocketHandle* pSH, SOCKET newSocket);
  35. virtual void OnConnectionDropped(CSocketHandle* pSH);
  36. virtual void OnConnectionError(CSocketHandle* pSH, DWORD dwError);
  37. protected:
  38. void GetAddress(const SockAddrIn& addrIn, CString& rString) const;
  39. bool GetDestination(SockAddrIn& addrIn) const;
  40. public:
  41. CServerSocket(void);
  42. ~CServerSocket(void);
  43. public:
  44. int SvrStart(CString strPort);
  45. void SocketStop();
  46. void SocketSend(CSocketHandle &sockHandle, unsigned char *pMsg, int iLength);
  47. protected:
  48. int m_nSockType;
  49. int m_nMode;
  50. void ProcessData(CSocketHandle &sockHandle, const BYTE* pData, DWORD nLen);
  51. int OnCmdProcess(CSocketHandle &sockHandle, void *pData);
  52. int ProcessResDevOnline(CSocketHandle &sockHandle, void *pBuffer);
  53. int ProcessResSingleVarOnline(CSocketHandle &sockHandle, void *pBuffer);
  54. int ProcessResMulVarOnline(CSocketHandle &sockHandle, void *pBuffer);
  55. int ProcessResReadSingleVarData(CSocketHandle &sockHandle, void *pBuffer);
  56. int ProcessResReadMulVarData(CSocketHandle &sockHandle, void *pBuffer);
  57. int ProcessResWriteSingleVarData(CSocketHandle &sockHandle, void *pBuffer);
  58. int PrcocessResWriteMulVarData(CSocketHandle &sockHandle, void *pBuffer);
  59. int ProcessResSoftDog(CSocketHandle &sockHandle, void *pBuffer);
  60. int ProcessResAlarmConfirm(CSocketHandle &sockHandle, void *pBuffer);
  61. int ProcessResReadSpecSingleVarData(CSocketHandle &sockHandle, void *pBuffer);
  62. int ProcessResReadSpecMulVarData(CSocketHandle &sockHandle, void *pBuffer);
  63. #if 0
  64. int ProcessHeart(CSocketHandle &sockHandle, void *pBuffer);
  65. #endif
  66. //重新读取数据库通知
  67. int ProcessNoticeReadDBVar(CSocketHandle &sockHandle, void *pBuffer);
  68. int ProcessNoticeReadDBDev(CSocketHandle &sockHandle, void *pBuffer);
  69. int ProcessNoticeReadDBUser(CSocketHandle &sockHandle, void *pBuffer);
  70. int ProcessNoticeTestAlarm(CSocketHandle &sockHandle, void *pBuffer);
  71. //主动发变量的值给客户端 没有简单变量,特殊变量之分
  72. int ProcessAutoSendVarDataToClient(CSocketHandle &sockHandle, CBaseVar *pBaseVar );
  73. //主支发报警信息给客户端
  74. int ProcessAutoSendAlarmDataToClient( CSocketHandle &sockHandle,CHAR *pDevUid, int nVarID, int iStatus,CHAR *pContent
  75. ,double dbParaValue, int nUpperLimit,int nLowerLimit, int nNormalState,int nAlarmState,int nAlarmIndex );
  76. public:
  77. void AutoSendDataToAllClient( CBaseVar *pBaseVar );
  78. void AutoSendAlarmDataToClient( CHAR *pDevUid, int iVarID, int iStatus,CHAR *pContent
  79. ,double dbParaValue, int nUpperLimit,int nLowerLimit, int nNormalState,int nAlarmState,int nAlarmIndex );
  80. CSocketServer m_SocketServer;
  81. int m_nSocketIndex;
  82. CRITICAL_SECTION m_csProcessData;
  83. };
  84. extern CServerSocket* g_pServerSocket[MAX_SERVER_LISTEN];
  85. };