/// 从UDP中接收数据 void CChatRoomServerDlg::OnReceive() { /// 接收数据 CString strIP; UINT uPort; char szReceive[ MAXDATAPACKETLENGTH ]; m_pCRSSocket->ReceiveFrom( szReceive, MAXDATAPACKETLENGTH, strIP, uPort ); /// 装配数据包 DATAPACKET dataPacket; memcpy( &dataPacket, szReceive, sizeof( DATAPACKET ) ); USER user; CHATROOMMESSAGEINFO CRMInfo; /// 根据命令进行不同的处理 switch( dataPacket.command ) { case CHATROOM_ADDREQUEST_DENY: /// 客户端拒绝加入聊天室服务器 break; case CHATROOM_ADDREQUEST_ALLOW: /// 客户端允许加入聊天室服务器 memcpy( &user, szReceive + sizeof( DATAPACKET ), sizeof( USER ) ); memcpy( user.strIP, strIP.GetBuffer( 16 ), 16 ); strIP.ReleaseBuffer(); AddUserToChatRoom( user ); break; case CHATROOM_CLIENT_CLOSED: /// 客户端关闭聊天室 memcpy( &user, szReceive + sizeof( DATAPACKET ), sizeof( USER ) ); memcpy( user.strIP, strIP.GetBuffer( 16 ), 16 ); strIP.ReleaseBuffer(); DelUserFromChatRoom( user ); break; case CHATROOM_TEXT: /// 接收到文本消息 memcpy( &CRMInfo, szReceive + sizeof( DATAPACKET ), sizeof( CHATROOMMESSAGEINFO ) ); memcpy( CRMInfo.szSrcIP, strIP.GetBuffer( 16 ), 16 ); strIP.ReleaseBuffer(); ReceiveText( CRMInfo, szReceive + sizeof( DATAPACKET ) + sizeof( CHATROOMMESSAGEINFO ), dataPacket.dwLength ); break; default: break; } }
void Worker::Decoding(char *data, int length) { if (*data != '$') { return; } char tempdata_tra[1024] = ""; char tempdata_gga[1024] = ""; bool bSave_tra = false; bool bSave_gga = false; int ggaIndex = 0; int traIndex = 0; for (int i = 0; i < 1024; ++i) { if (*(data + i) == '$') { char temp[7] = ""; for (int j = 0; j < 6; ++j) { temp[j] = *(data + i + j); } if (strcmp(temp, "$GPTRA") == 0) { bSave_tra = true; } else if(strcmp(temp, "$GPGGA") == 0) { bSave_gga = true; } } if (bSave_gga) { if (*(data + i + 1) != '$') { tempdata_gga[ggaIndex] = *(data + i); ++ggaIndex; } else { bSave_gga = false; } } if (bSave_tra) { if (*(data + i + 1) != '$') { tempdata_tra[traIndex] = *(data + i); ++traIndex; } else { bSave_tra = false; } } } if (ggaIndex != 0) { emit ReceiveText(tempdata_gga, ggaIndex); } if (traIndex != 0) { emit ReceiveText(tempdata_tra, traIndex); } }
static int cgimain( struct Weixin4cEnv *penv ) { char *signature = NULL ; char *timestamp = NULL ; char *nonce = NULL ; char *echostr = NULL ; char *post_data = NULL ; int post_data_len ; xml req ; int nret = 0 ; PUBSendContentTypeHtml(); PUBDupUrlParam( "signature" , & signature ); PUBDupUrlParam( "timestamp" , & timestamp ); PUBDupUrlParam( "nonce" , & nonce ); PUBDupUrlParam( "echostr" , & echostr ); if( signature && timestamp && nonce && echostr ) { SetLogFile( "%s/log/%s_VerifyServer.log" , penv->pconf->home , penv->pconf->project_name ); nret = VerifyServer( penv , signature , timestamp , nonce , echostr ) ; SetLogFile( "%s/log/%s_weixin4c.log" , penv->pconf->home , penv->pconf->project_name ); if( nret ) { ErrorLog( __FILE__ , __LINE__ , "VerifyServer failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "VerifyServer ok" ); } } else { nret = PUBReadPostBuffer() ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "PUBReadPostBuffer failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "PUBReadPostBuffer ok" ); post_data = PUBGetPostBufferPtr() ; post_data_len = PUBGetPostBufferLength() ; memset( & req , 0x00 , sizeof(xml) ); nret = DSCDESERIALIZE_XML_xml( NULL , post_data , & post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "DSCDESERIALIZE_XML_xml_MsgType failed[%d] , xml[%s]" , nret , post_data ); } else { InfoLog( __FILE__ , __LINE__ , "DSCDESERIALIZE_XML_xml_MsgType ok , xml[%s]" , post_data ); InfoLog( __FILE__ , __LINE__ , "req.MsgType[%s]" , req.MsgType ); if( strcmp( req.MsgType , "<![CDATA[event]]>" ) == 0 ) { nret = ReceiveEvent( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveEvent failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveEvent ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[text]]>" ) == 0 ) { nret = ReceiveText( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveText failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveText ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[image]]>" ) == 0 ) { nret = ReceiveImage( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveImage failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveImage ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[voice]]>" ) == 0 ) { nret = ReceiveVoice( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveVoice failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveVoice ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[video]]>" ) == 0 ) { nret = ReceiveVideo( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveVideo failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveVideo ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[shortvideo]]>" ) == 0 ) { nret = ReceiveShortVideo( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveShortVideo failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveShortVideo ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[location]]>" ) == 0 ) { nret = ReceiveLocation( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveLocation failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveLocation ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[link]]>" ) == 0 ) { nret = ReceiveLink( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveLink failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveLink ok" ); } } else { ErrorLog( __FILE__ , __LINE__ , "xml.MsgType[%s] invalid" , req.MsgType ); } } } } if( signature ) free( signature ); if( timestamp ) free( timestamp ); if( nonce ) free( nonce ); if( echostr ) free( echostr ); return nret; }