📄 smgppacket.cs
字号:
s += dt.Minute.ToString().PadLeft(2, '0');
s += dt.Second.ToString().PadLeft(2, '0');
return UInt32.Parse(s);
}
public int SMGP_login(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd,int i_loginmode)
{
// 网关注册函数
// 参数:
// str_S_IP:网关服务器IP
// str_S_port:网关服务器端口
// str_SPID:spid
// str_SPpwd:认证码
// loginMod:注册模式,0发送1接收,2收发
// 返回值: 0注册成功,注册失败返回错误码
if(netcon.net_Conn(str_S_IP,i_S_port)!=0)
{
//socket连接失败
return -1;
}
else
{
n_smgppackage.SMGP_Login login=new n_smgppackage.SMGP_Login();
login.header.setSequenceID(mtseqid++);
login.setClientID(str_SPID);
login.setLoginMode(i_loginmode);
login.setTimestamp(DateTime.Now);
login.setVersion(0x13);
login.setAuthenticatorClient(str_SPpwd);
n_smgppackage.SMGP_Login_resp login_resp=new n_smgppackage.SMGP_Login_resp();
try
{
//数据打包并发送
netcon.smgp_send(login.SMGP_Login_pack(),0,login.header.getPacketLength());
Console.WriteLine("Login request......");
//接收回应
byte[] recvBuffer=new byte[12+4+16+1];
netcon.smgp_recv(recvBuffer,0,recvBuffer.Length);
login_resp.SMGP_Login_resp_unpack(recvBuffer);
if (login_resp.header.getCommandID()!=n_smgppackage.SMGP_COMMAND_ID.SMGP_LOGIN_RESP)
{
Console.WriteLine("Get no Login response");
return -1;
}
Console.WriteLine("Login response status:{0}",login_resp.getStatus());
Console.WriteLine("Login response version:{0}",login_resp.getVsersion());
return login_resp.getStatus();
}
catch(Exception ex)
{
Console.WriteLine("Login error:{0}",ex.Message.ToString());
return -1;
}
}
/*
SMGP_Login_resp login_resp=new SMGP_Login_resp();
*/
}
public int SMGP_mt_Send(int SubType,int NeedReport,int Priority,string ServiceID,string FeeType,string FeeCode,string FixCode,
int MsgFormat,string ValidTime,string AtTime,string SrcTermID,string ChargeTermID,int DestTermIDCount,string DestTermID,
string MsgContent,string Reserve)
{
// 向网关发送SUBMIT包
// 参数:submit包的各种参数
// 返回:发送成功0,发送失败-1
try
{
n_smgppackage.SMGP_Submit submit=new n_smgppackage.SMGP_Submit();
submit.header.setSequenceID(mtseqid);
submit.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_SUMBIT);
submit.setSubType((byte)SubType);
submit.setNeedReport((byte)NeedReport);
submit.setPriority((byte)Priority);
submit.setServiceID(ServiceID);
submit.setFeeType(FeeType);
submit.setFeeCode(FeeCode);
submit.setFixCode(FixCode);
submit.setMsgFormat((byte)MsgFormat);
submit.setValidTime(ValidTime);
submit.setAtTime(AtTime);
submit.setSrcTermID(SrcTermID);
submit.setChargeTermID(ChargeTermID);
submit.setDestTermIDCount((byte)DestTermIDCount);
submit.setDestTermID(DestTermID);
submit.setMsgContent(MsgContent);
submit.setReserve("");
this.netcon.smgp_send(submit.SMGP_Submit_pack(),0,submit.header.getPacketLength());
Console.WriteLine("{0} Submit data sending...",DateTime.Now);
Console.WriteLine("Spnumber:{0}",SrcTermID);
Console.WriteLine("Usernumber:{0}",DestTermID);
Console.WriteLine("Msg:{0}",MsgContent);
return 0;
}
catch(Exception ex)
{
Console.WriteLine("Submit error:{0}",ex.Message.ToString());
return -1;
}
}
public int SMGP_mt_Recv()
{
// 包接收函数
// 描述:接收数据包包,同时发送回应
// 参数:
// 返回:
// 创建:李文达 2005-10-10
//Console.WriteLine("进入接收MSGID的函数");
//先收包头
try
{
byte[] b_header=new byte[12];
int packlength=0;
n_smgppackage.SMGP_COMMAND_ID reCmdID=new n_smgppackage.SMGP_COMMAND_ID();
n_smgppackage.SMGP_Header header=new n_smgppackage.SMGP_Header();
this.netcon.smgp_recv(b_header,0,b_header.Length);
header.SMGP_Header_unpack(b_header);
packlength=header.getPacketLength();
reCmdID=header.getCommandID();
//Console.WriteLine("得到包长:{0}",packlength);
Console.WriteLine("{0} MT thread get gateway data:{1}",DateTime.Now.ToString(),header.getCommandID().ToString());
//Console.WriteLine("得到流水号:{0}",header.getSequenceID().ToString());
switch(reCmdID)
{
case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST: //活动测试,需要回应
//Console.WriteLine("mt收到活动测试");
n_smgppackage.SMGP_Activetest_resp actresp=new n_smgppackage.SMGP_Activetest_resp();
actresp.header.setPacketLength(12);
actresp.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP);
actresp.header.setSequenceID(header.getSequenceID());
//数据打包并发送
this.netcon.smgp_send(actresp.SMGP_Activetest_resp_pack(),0,actresp.header.getPacketLength());
//Console.WriteLine("mt发送活动测试包回应");
break;
case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP: //活动测试回应,不需要回应
//Console.WriteLine("mt收到活动测试的回应");
break;
case n_smgppackage.SMGP_COMMAND_ID.SMGP_EXIT: //断开连接,需要回应
Console.WriteLine("SUBMIT的时候收到退出请求!!");
this._mtalive=false;
break;
case n_smgppackage.SMGP_COMMAND_ID.SMGP_SUBMIT_RESP:
//Console.WriteLine("mt收到SUBMIT_RESP");
byte[] recvBuffer=new byte[1024];
Buffer.BlockCopy(b_header,0,recvBuffer,0,b_header.Length); //把包头连上
this.netcon.smgp_recv(recvBuffer,12,packlength-12); //把数据包收完
n_smgppackage.SMGP_Submit_resp submit_resp=new n_smgppackage.SMGP_Submit_resp();
submit_resp.SMGP_Submit_resp_unpack(recvBuffer);
//Console.WriteLine("seqid{0}",submit_resp.header.getSequenceID().ToString());
Console.WriteLine("{0} Submit status:{1}",submit_resp.getMsgID(),submit_resp.getStatus());
this.recordmt(submit_resp.header.getSequenceID().ToString(),submit_resp.getMsgID(),submit_resp.getStatus());
//this.dbconndb.WriteMsgID(submit_resp.getMsgID(),submit_resp.getStatus(),submit_resp.header.getSequenceID());
break;
default:
Console.WriteLine("mt收到未知的数据包");
this._mtalive=false;
break;
}
return 0;
}
catch(Exception ex)
{
Console.WriteLine("submit_resp执行失败:{0}",ex.Message.ToString());
this._mtalive=false;
return -1;
}
}
public int SMGP_mo_recv()
{
// 包接收函数,根据不同的包做相应的处理
// 描述:接收数据包包,同时发送回应
// 参数:SocketConn,DBConn_mo
// 返回:成功返回0,失败返回错误代码,错误返回-1
// 创建:李文达 2005-10-08
// 先收包头
try
{
byte[] b_header=new byte[12];
int packlength;
uint rseq_id;
int getlength;
n_smgppackage.SMGP_COMMAND_ID reCmdID=new n_smgppackage.SMGP_COMMAND_ID();
n_smgppackage.SMGP_Header header=new n_smgppackage.SMGP_Header();
getlength=this.netcon.smgp_recv(b_header,0,b_header.Length);
if (getlength==0) /*什么都没有收到的情况*/
{
return -1;
}
header.SMGP_Header_unpack(b_header);
packlength=header.getPacketLength();
rseq_id=header.getSequenceID();
reCmdID=header.getCommandID();
Console.WriteLine("{0} MO thread get gateway data:{1}",DateTime.Now.ToString(),header.getCommandID().ToString());
//Console.WriteLine(reCmdID);
switch(reCmdID)
{
case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST: //活动测试,需要回应
//Console.WriteLine("MO thread get SMGP_ACTIVE_TEST");
n_smgppackage.SMGP_Activetest_resp actresp=new n_smgppackage.SMGP_Activetest_resp();
actresp.header.setPacketLength(12);
actresp.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP);
actresp.header.setSequenceID(rseq_id);
//数据打包并发送
this.netcon.smgp_send(actresp.SMGP_Activetest_resp_pack(),0,actresp.header.getPacketLength());
//Console.WriteLine("mo发送活动测试包回应");
break;
case n_smgppackage.SMGP_COMMAND_ID.SMGP_ACTIVE_TEST_RESP: //活动测试回应,不需要回应
//Console.WriteLine("MO thread get SMGP_ACTIVE_TEST_RESP");
break;
case n_smgppackage.SMGP_COMMAND_ID.SMGP_DELIVER: //DELIVER,需要回应
//Console.WriteLine("MO thread get SMGP_DELIVER");
byte[] recvBuffer=new byte[packlength];
Buffer.BlockCopy(b_header,0,recvBuffer,0,b_header.Length); //把包头连上
//Console.WriteLine("把包头连上");
this.netcon.smgp_recv(recvBuffer,12,packlength-12);
//Console.WriteLine("收完剩下的包");
n_smgppackage.SMGP_Deliver deliver=new n_smgppackage.SMGP_Deliver();
n_smgppackage.SMGP_Deliver_resp deliver_resp=new n_smgppackage.SMGP_Deliver_resp();
deliver_resp.header.setPacketLength(12+10+4);
deliver_resp.header.setRequestID(n_smgppackage.SMGP_COMMAND_ID.SMGP_DELIVER_RESP);
deliver_resp.header.setSequenceID(rseq_id);
deliver_resp.setMsgID(deliver.getMsgID_b());
deliver_resp.setStatus(0);
this.netcon.smgp_send(deliver_resp.SMGP_Deliver_resp_pack(),0,12+10+4);
//Console.WriteLine("mo发送DELIVER的回应");
deliver.SMGP_Deliver_unpack(recvBuffer);
//Console.WriteLine("MsgID:{0}",deliver.getMsgID());
Console.WriteLine("IsReport:{0}",deliver.getIsReport());
//Console.WriteLine("MsgFormat:{0}",deliver.getMsgFormat());
Console.WriteLine("SrcTermID:{0}",deliver.getSrcTermID());
Console.WriteLine("DestTermID:{0}",deliver.getDestTermID());
//Console.WriteLine("MsgLength:{0}",deliver.getMsgLength());
if (deliver.getIsReport()==1)
{
//Console.WriteLine("Report_Id:{0}",deliver.Reporter.getID());
//Console.WriteLine("Report_Sub:{0}",deliver.Reporter.getSub());
//Console.WriteLine("Report_Dlvrd:{0}",deliver.Reporter.getDlvrd());
//Console.WriteLine("Report_Submit_date:{0}",deliver.Reporter.getSubmit_date());
//Console.WriteLine("Report_Done_date:{0}",deliver.Reporter.getDone_date());
//Console.WriteLine("Report_Stat:{0}",deliver.Reporter.getStat());
//Console.WriteLine("Report_Err:{0}",deliver.Reporter.getErr());
//Console.WriteLine("Report_Text:{0}",deliver.Reporter.getText());
//Console.WriteLine("Is Report!");
int iresult=this.sqldbw.InsertReport(deliver.Reporter.getID(),deliver.Reporter.getSub(),
deliver.Reporter.getDlvrd(),deliver.Reporter.getSubmit_date(),
deliver.Reporter.getDone_date(),deliver.Reporter.getStat(),
deliver.Reporter.getErr(),deliver.Reporter.getText());
if (iresult!=0)
{
_moalive=false;
}
}
else
{
Console.WriteLine("MsgContent:{0}",deliver.getMsgContent());
this.sqldbw.InsertDeliver(deliver.getMsgID(),deliver.getMsgFormat(),deliver.getRecvTime(),deliver.getSrcTermID(),deliver.getDestTermID(),deliver.getMsgLength(),deliver.getMsgContent());
}
break;
case n_smgppackage.SMGP_COMMAND_ID.SMGP_EXIT: //断开连接,需要回应
Console.WriteLine("MO thread get SMGP_DELIVER_exit");
_moalive=false;
break;
default:
Console.WriteLine("mo收到未知的数据包");
this._moalive=false;
break;
}
return 0;
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
this._moalive=false;
return -1;
}
}
public int SMGP_deliver(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd)
{
int statlogin=SMGP_login(str_S_IP,i_S_port,str_SPID,str_SPpwd,1);
if (statlogin!=0)
{
Console.WriteLine("MO Login error");
return statlogin;
}
else
{
Console.WriteLine("MO Login gateway !");
while (_moalive)
{
this.SMGP_mo_recv();
}
}
return -1;
}
public void SMGP_thread_mo(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd)
{
try
{
SMGP_deliver(str_S_IP,i_S_port,str_SPID,str_SPpwd);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
}
public int SMGP_submit(string str_S_IP,int i_S_port,string str_SPID,string str_SPpwd,int slp_persend,string pergroup)
{
int statlogin=SMGP_login(str_S_IP,i_S_port,str_SPID,str_SPpwd,0);
if (statlogin!=0)
{
Console.WriteLine("MT Login error");
return statlogin;
}
else
{
Console.WriteLine("Login gateway !");
_mtalive=true;
Thread thr_mtRecv=new Thread(new ThreadStart(thread_mt_recv));
thr_mtRecv.Start();
try
{
while(_mtalive)
{
int i_countsubmit=sqldbr.getPreSubmit(pergroup);
for(int i=0;i<i_countsubmit&&_mtalive;i++)
{
int SubType=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["SubType"].ToString());
int NeedReport=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["NeedReport"].ToString());
int Priority=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["Priority"].ToString());
string ServiceID=sqldbr.ds_Submit.Tables[0].Rows[i]["ServiceID"].ToString();
string FeeType=sqldbr.ds_Submit.Tables[0].Rows[i]["FeeType"].ToString();
string FeeCode=sqldbr.ds_Submit.Tables[0].Rows[i]["FeeCode"].ToString();
string FixCode=sqldbr.ds_Submit.Tables[0].Rows[i]["FixCode"].ToString();
int MsgFormat=Int32.Parse(sqldbr.ds_Submit.Tables[0].Rows[i]["MsgFormat"].ToString());
string ValidTime=sqldbr.ds_Submit.Tables[0].Rows[i]["ValidTime"].ToString();
string AtTime=sqldbr.ds_Submit.Tables[0].Rows[i]["AtTime"].ToString();
string SrcTermID=sqldbr.ds_Submit.Tables[0].Rows[i]["SrcTermID"].ToString();
string ChargeTermID=sqldbr.ds_Submit.Tables[0].Rows[i]["ChargeTermID"].ToString();
int DestTermIDCount=1;
string DestTermID=sqldbr.ds_Submit.Tables[0].Rows[i]["DestTermID"].ToString();
string MsgContent=sqldbr.ds_Submit.Tables[0].Rows[i]["MsgContent"].ToString();
string Reserve=sqldbr.ds_Submit.Tables[0].Rows[i]["Reserve"].ToString();
string fromcp=sqldbr.ds_Submit.Tables[0].Rows[i]["fromcp"].ToString();
DataRow newdr=tempds.Tables["temptable"].NewRow();
newdr["SEQID"]=++mtseqid;
newdr["SubType"]=SubType;
newdr["NeedReport"]=NeedReport;
newdr["Priority"]=Priority;
newdr["ServiceID"]=ServiceID;
newdr["FeeType"]=FeeType;
newdr["FeeCode"]=FeeCode;
newdr["FixCode"]=FixCode;
newdr["MsgFormat"]=MsgFormat;
newdr["ValidTime"]=ValidTime;
newdr["AtTime"]=AtTime;
newdr["SrcTermID"]=SrcTermID;
newdr["ChargeTermID"]=ChargeTermID;
newdr["DestTermIDCount"]=DestTermIDCount;
newdr["DestTermID"]=DestTermID;
newdr["MsgContent"]=MsgContent;
newdr["Reserve"]=Reserve;
newdr["fromcp"]=fromcp;
tempds.Tables["temptable"].Rows.Add(newdr);
// Console.WriteLine("SubType:{0}",SubType);
// Console.WriteLine("NeedReport:{0}",NeedReport);
// Console.WriteLine("Priority:{0}",Priority);
// Console.WriteLine("ServiceID:{0}",ServiceID);
// Console.WriteLine("FeeType:{0}",FeeType);
// Console.WriteLine("FeeCode:{0}",FeeCode);
// Console.WriteLine("FixCode:{0}",FixCode);
// Console.WriteLine("MsgFormat:{0}",MsgFormat);
// Console.WriteLine("ValidTime:{0}",ValidTime);
// Console.WriteLine("AtTime:{0}",AtTime);
// Console.WriteLine("SrcTermID:{0}",SrcTermID);
// Console.WriteLine("ChargeTermID:{0}",ChargeTermID);
// Console.WriteLine("DestTermIDCount:{0}",DestTermIDCount);
// Console.WriteLine("DestTermID:{0}",DestTermID);
// Console.WriteLine("MsgContent:{0}",MsgContent);
// Console.WriteLine("Reserve:{0}",Reserve);
// Console.WriteLine("***************************************");
sqldbr.ds_Submit.Tables[0].Rows[i].Delete();
SMGP_mt_Send(SubType,NeedReport,Priority, ServiceID, FeeType,FeeCode,FixCode,MsgFormat,
ValidTime, AtTime, SrcTermID,ChargeTermID,DestTermIDCount,DestTermID,MsgContent,Reserve);
Thread.Sleep(slp_persend);
}
sqldbr.UpdateData();
Thread.Sleep(1000);
}
return -2;
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
_mtalive=false;
return -1;
}
}
}
public int SMGP_EXIT()
{
n_smgppackage.SMGP_Exit mExit = new n_smgppackage.SMGP_Exit();
this.netcon.smgp_send(mExit.SMGP_Exit_pack(), 0, mExit.header.getPacketLength());
return 0;
}
public void thread_mt_recv()
{
Console.WriteLine("进入MTRECV线程");
try
{
while(_mtalive)
{
this.SMGP_mt_Recv();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
_mtalive=false;
}
}
public void recordmt(string mtseqid,string msgid,int status)
{
int irowcount=tempds.Tables["temptable"].Rows.Count;
//Console.WriteLine("临时表中数据为:{0}",tempds.Tables["temptable"].Rows.Count);
for(int i=0;i<irowcount;i++)
{
if(tempds.Tables["temptable"].Rows[i]["SEQID"].ToString()==mtseqid.ToString())
{
//Console.WriteLine("准备记录MT,i={0}",i);
this.sqldbw.InsertMT(tempds.Tables["temptable"].Rows[i]["SEQID"].ToString(),
Int32.Parse(tempds.Tables["temptable"].Rows[i]["SubType"].ToString()),
Int32.Parse(tempds.Tables["temptable"].Rows[i]["NeedReport"].ToString()),
Int32.Parse(tempds.Tables["temptable"].Rows[i]["Priority"].ToString()),
tempds.Tables["temptable"].Rows[i]["ServiceID"].ToString(),
tempds.Tables["temptable"].Rows[i]["FeeType"].ToString(),
tempds.Tables["temptable"].Rows[i]["FeeCode"].ToString(),
tempds.Tables["temptable"].Rows[i]["FixCode"].ToString(),
Int32.Parse(tempds.Tables["temptable"].Rows[i]["MsgFormat"].ToString()),
tempds.Tables["temptable"].Rows[i]["ValidTime"].ToString(),
tempds.Tables["temptable"].Rows[i]["AtTime"].ToString(),
tempds.Tables["temptable"].Rows[i]["SrcTermID"].ToString(),
tempds.Tables["temptable"].Rows[i]["ChargeTermID"].ToString(),
Int32.Parse(tempds.Tables["temptable"].Rows[i]["DestTermIDCount"].ToString()),
tempds.Tables["temptable"].Rows[i]["DestTermID"].ToString(),
tempds.Tables["temptable"].Rows[i]["MsgContent"].ToString(),
tempds.Tables["temptable"].Rows[i]["Reserve"].ToString(),
msgid,status,tempds.Tables["temptable"].Rows[i]["fromcp"].ToString());
//Console.WriteLine("纪录MT完成");
//Console.WriteLine("准备删除零时表中第{0}条纪录",i);
tempds.Tables["temptable"].Rows[i].Delete();
//Console.WriteLine("删除零时表中第{0}条纪录",i);
break;
}
}
//Console.WriteLine("临时表中还有数据为:{0}",tempds.Tables["temptable"].Rows.Count);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -