⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _emspreceivor.cpp

📁 这是江苏企业通讯协议(联通版本)的一个Release
💻 CPP
字号:
#include "stdafx.h"
#include ".\_emspreceivor.h"
#include "net_protocal.h"
#include "_MSG_Head.h"
#include "_MBREPORT.h"
#include "_DELIVER.h"
#include "_S_REPORT_RESP.h"
#include ".\revthread.h"
#include "EMSP_ERROR.h"
#include "_MBLOGIN_RESP.h"
#include"_MBNOOP.h"
#include "EMSP_ERROR.h"
#include "_MBNOOP_RESP.h"
#include <typeinfo.h>
#include <windows.h>//Use system resorce lock
using namespace EMSP2_0;

EMSP2_0::C_EMSPReceivor::C_EMSPReceivor(void)
: done(false)
, internal(500)
{
   RevThread* rthread=new RevThread();
   rthread->recvor=this;
   m_thread=rthread;
}

EMSP2_0::C_EMSPReceivor::~C_EMSPReceivor(void)
{   done=false;
	delete m_thread;
}

MB_REPORT* EMSP2_0::C_EMSPReceivor::GetReport(void)
{MB_REPORT* value=NULL;
 if(v_Report.size()>0)
 {
	 value=&v_Report[v_Report.size()-1];
	 v_Report.pop_back();
 }
 return value;
	
}

MB_DELIVER* EMSP2_0::C_EMSPReceivor::Get_DELIVER(void)
{   MB_DELIVER* value=NULL;
	if(v_Deliver.size()>0)
{

 value= &	v_Deliver[v_Deliver.size()-1];
  v_Deliver.pop_back();
}
	return value;
}

void EMSP2_0::C_EMSPReceivor::start(void)
{  done=true;
	m_thread->start();
}

void EMSP2_0::C_EMSPReceivor::stop(void)
{
	done=false;
}

void EMSP2_0::C_EMSPReceivor::run(void)
{
	while (done) {
		MsgHead mh=GetMsgHead();
		 int size=mh.Total_length-13;
		switch(mh.Command_ID) {
		case S_DELIVER:
			  {   GetDeliver(size);
				  break;
			  }
			
		case S_REPORT :
			  {   get_Report(size);
				  break;
			  }
		
		}
		Sleep(internal);

	}
	
}

MsgHead EMSP2_0::C_EMSPReceivor::GetMsgHead(void)
{
	char buff[13];
	if(ReceiveBuf((void*)buff,13)>0)
	{
		C_MSG_Head msgObj;
		msgObj.TransFromchars(buff,13);
	return *	msgObj.value();
	}else
    	return MsgHead();
}

void EMSP2_0::C_EMSPReceivor::get_Report(int size)
{   
    char mb;
	
	MsgHead mh;
	FillHead(&mh,S_REPORT_RESP);
    mh.Total_length=14;
	char* buff=new char[size];
     if(ReceiveBuf((void*)buff,size))
	 {
       C_MBREPORT mbr;
	   mbr.TransFromchars(buff,size);
	   delete[] buff;
	   //v_Report.push_back(*mbr.value());
	   char s[500];
           sprintf(s," Report:\nClientSeq1=%d \n ClientSeq2=%d \n UserNumber=%s \n State=%d \n ErrCode=%d \n Report End\n"
           ,mbr.value()->ClientSeq1, mbr.value()->ClientSeq2,mbr.value()->UserNumber.c_str(),
           mbr.value()->State,mbr.value()->ErrCode);
           writeRevlog(s);

		
		mb=0;

	   
	 }
	 else
	 {
		 mb=1;
	 }
	 C_MSG_Head mhobj(mh);
	 
	 char* hbuff =mhobj.getBytes();
     
	 SendBuff((void*)hbuff,13);
	 SendBuff((void*)mb,1);
          lastActive=time(NULL);
	  delete[] buff;
	
}

void EMSP2_0::C_EMSPReceivor::GetDeliver(int size)
{   char mb;

MsgHead mh;
FillHead(&mh,S_DELIVER_RESP);
mh.Total_length=14;
char* buff=new char[size];
if(ReceiveBuf((void*)buff,size))
{
	C_DELIVER mbr;
	mbr.TransFromchars(buff,size);
	delete[] buff;
	v_Deliver.push_back(*mbr.value());


	mb=0;


}
else
{
	mb=1;
}
C_MSG_Head mhobj(mh);

char* hbuff =mhobj.getBytes();

SendBuff((void*)hbuff,13);
SendBuff((void*)mb,1);
lastActive=time(NULL);
delete[] buff;

	
}
bool EMSP2_0::C_EMSPReceivor::Get_DELIVER(MB_DELIVER* md)
{   char mb;
     MsgHead mh1=GetMsgHead();
      int size=mh1.Total_length-13;
   switch(mh1.Command_ID){

  case S_DELIVER:
   {
      bool flag=false;
		 
    MsgHead mh;
    FillHead(&mh,S_DELIVER_RESP);
     mh.Total_length=14;
    char* buff=new char[size];
    if(ReceiveBuf((void*)buff,size))
     {
	C_DELIVER mbr;
	mbr.TransFromchars(buff,size);
	delete[] buff;

           flag=true;
        md->Caller=mbr.value()->Caller;
        md->Called=mbr.value()->Called;
        md->TP_pid=mbr.value()->TP_pid;
        md->TP_udhi=mbr.value()->TP_udhi;
        md->MsgCoding=mbr.value()->MsgCoding;
        md->MsgLen=mbr.value()->MsgLen;
        memcpy(md->MsgContent,mbr.value()->MsgContent,160);

	mb=0;
       
     }
    else
    {
	mb=1;
          delete[] buff;
        flag=false;
    

    }
    C_MSG_Head mhobj(mh);

    char* hbuff =mhobj.getBytes();

   SendBuff((void*)hbuff,13);
    SendBuff((void*)&mb,1);
     lastActive=time(NULL);
    return flag;
    }
   case C_NOOP_RESP:
   {
     char* buff=new char[size];
     ReceiveBuf((void*)buff,size);
     m_SessionID=buff;
     delete[] buff;
   }
   case S_REPORT:
   {
       get_Report(size);
				  break;
   }
   default:
   {
     //Keep Connection
        time_t t =time(NULL);
if ((t-lastActive)>10)
{
  MsgHead mh;
  FillHead(&mh,C_NOOP);
  MB_NOOP mb;
  mb.SessionID=m_SessionID;
  C_MBNOOP mbobj(mb);
  int size=mb.SessionID.size()+1;  
  mh.Total_length=size+13;
  C_MSG_Head mhObj(mh);
  char* mhBuf=mhObj.getBytes();
  char* mbBuf=mbobj.getByttes();
 SendBuff((void*)mhBuf,13);
 SendBuff((void*)mbBuf,size);
  /*char buff[13];
  if(ReceiveBuf(buff,13))
  {
    mhObj.TransFromchars(buff,13);
    int rsize=mhObj.value()->Total_length-13;
    char * rbuff=new char[rsize];
    if(ReceiveBuf((void*)rbuff,rsize))
    {     C_MBNOOP_RESP mrb;
        mrb.TransFromchars(rbuff,rsize);
        if(mrb.value()->Result==0)   //Keep Connection OK
        {
         m_SessionID=mrb.value()->SessionID;


          lastActive=time(NULL);
           string s=typeid(*this).name();
           s=s+ ctime(&lastActive);
           s=s+":"+"Keep Connection OK ";
          writelog(s.c_str());
        }
        else
        {
            theSock->ReConnect();
            Login();
            EMSP2_0::ShowError(mrb.value()->Result);
        }

    }
    else
    {
     theSock->ReConnect();
            Login();
    }
    delete[] rbuff;
  } else
  {
   theSock->ReConnect();
            Login();
  }   */

  }


   
   }
 }
 return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -