📄 sgipserver.cpp
字号:
// SGIPServer.cpp: implementation of the CSGIPServer class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SGIPGateWay.h"
#include "SGIPServer.h"
#include "wjdpacket.h"
#include "spserver.h"
#include "sgippacket.h"
#include "childview.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CSGIPServer gSGIPServer;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSGIPServer::CSGIPServer()
{
}
CSGIPServer::~CSGIPServer()
{
}
DWORD WINAPI CSGIPServer::ProcessThread(LPVOID lpParam)
{
SOCKET sClient = (SOCKET)lpParam;
CSGIPPacket sPacket;
CWJDPacket sWJD;
BYTE lpBuffer[10240];
SBIND sBind;
SDELIVER sDeliver;
SSGIP_MESSAGE_HEAD sUnbind;
//MessagePack msgPack;
char strSender[20], strSendTo[20], strMsg[200];
int nLen;
SSGIP_MESSAGE_HEAD *pHead;
BYTE *p;
int nBuffLen;
while(TRUE)
{
nLen = recv(sClient, (char*)lpBuffer, sizeof(lpBuffer), 0);
if( nLen == 0 )
{
if( gpView )
gpView->ShowTimeMsg("SMG客户端从本网关断开!", RGB(255,255,0));
break;
}
else if( nLen < 0 )
{
if( gpView )
gpView->ShowTimeMsg("接收SMG服务器数据出错!", RGB(255,0,0));
break;
}
pHead = (SSGIP_MESSAGE_HEAD *)lpBuffer;
switch(ntohl(pHead->Cmd_id))
{
case SGIP_BIND:
memcpy(&sBind, lpBuffer, sizeof(sBind));
nLen = sPacket.PacketBindResp(lpBuffer, &sBind);
nLen = send(sClient, (char*)lpBuffer, nLen, 0);
if( nLen <= 0 )
{
if( gpView )
gpView->ShowTimeMsg("发送绑定回应到SMG出错!", RGB(255,0,0));
closesocket(sClient);
gSGIPServer.ClientRelease();
return 0;
}
if( gpView )
gpView->ShowTimeMsg("SMG连接到本服务器,准备接收数据!", RGB(255,255,192));
break;
case SGIP_UNBIND:
memcpy(&sUnbind, lpBuffer, sizeof(sUnbind));
nLen = sPacket.PacketUnbindResp(lpBuffer, &sUnbind);
nLen = send(sClient, (char*)lpBuffer, nLen, 0);
if( nLen <= 0 )
{
if( gpView )
gpView->ShowTimeMsg("发送取消绑定回应数据到SMG出错!", RGB(255,255,0));
closesocket(sClient);
gSGIPServer.ClientRelease();
return 0;
}
if( gpView )
gpView->ShowLockMsg("SMG服务器数据发送完毕,已断开连接!", RGB(255,255,192));
break;
case SGIP_DELIVER:
nBuffLen = nLen;
p = lpBuffer;
while(nBuffLen > 0 )
{
memcpy(&sDeliver, p, sizeof(sDeliver));
nLen = sPacket.PacketDeliverResp(p, &sDeliver);
nLen = send(sClient, (char*)lpBuffer, nLen, 0);
if( nLen <= 0 )
{
if( gpView )
gpView->ShowTimeMsg("发送上行回应数据到SMG出错!", RGB(255,0,0));
closesocket(sClient);
gSGIPServer.ClientRelease();
return 0;
}
// 向王均达转发数据
sPacket.ParseDeliverPacket((BYTE *)&sDeliver, strSender, strSendTo, strMsg);
nLen = sWJD.GetPacket(lpBuffer, 1, strSender, strSendTo, strMsg);
// 发给王均达
//nLen = send(WJDSocket, lpBuffer, nLen, 0);
gSPServer.SendToWJD(lpBuffer, nLen);
nBuffLen -= sizeof(sDeliver);
p += sizeof(sDeliver);
}
break;
}
}
closesocket(sClient);
gSGIPServer.ClientRelease();
return 0;
}
void CSGIPServer::OnError(int nErrorCode)
{
}
void CSGIPServer::OnAccept(SOCKET sClientSocket, char *strClientIP)
{
DWORD id;
CString str;
str.Format("SMG客户端: %s 连接到本网关", strClientIP);
if( gpView )
gpView->ShowTimeMsg((char *)(LPCTSTR)str);
CreateThread(NULL, NULL, ProcessThread, (LPVOID)sClientSocket, 0, &id);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -