📄 cngpprotocol.cs
字号:
/// <param name="msgFormat">短消息格式</param>
/// <param name="validTime">有效时间</param>
/// <param name="atTime">定时发送时间</param>
/// <param name="srcTermID">下行代码</param>
/// <param name="chargeTermID">计费用户号码</param>
/// <param name="destTermIDCount">短消息接收号码总数</param>
/// <param name="destTermID">短消息接收号码</param>
/// <param name="msgLength">短消息长度</param>
/// <param name="msgContent">短消息内容</param>
public void Cngp_Submit(
string spId,
byte subType,
byte needReport,
byte priority,
string serviceId,
string feeType,
byte feeUserType,
string feeCode,
byte msgFormat,
string validTime,
string atTime,
string srcTermID,
string chargeTermID,
byte destTermIDCount,
string destTermID,
byte msgLength,
string msgContent,
ref uint outSequence)
{
if(IsConnectedWithIsmg)
{
byte[] MessageBody=new byte[111+21*(int)destTermIDCount+(int)msgLength];
int i=0;//Cursor
cngpMessage.AddToBuffer(ref MessageBody,ref i,spId,10,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,subType);
cngpMessage.AddToBuffer(ref MessageBody,ref i,needReport);
cngpMessage.AddToBuffer(ref MessageBody,ref i,priority);
cngpMessage.AddToBuffer(ref MessageBody,ref i,serviceId,10,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,feeType,2,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,feeUserType);
cngpMessage.AddToBuffer(ref MessageBody,ref i,feeCode,6,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,msgFormat);
cngpMessage.AddToBuffer(ref MessageBody,ref i,validTime,17,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,atTime,17,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,srcTermID,21,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,chargeTermID,21,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,destTermIDCount);
cngpMessage.AddToBuffer(ref MessageBody,ref i,destTermID,destTermIDCount*21,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,msgLength);
cngpMessage.AddToBuffer(ref MessageBody,ref i,msgContent,(int)msgLength,CngpMessage.Character.GB);
//
//--------------------------------pack---------------------------------------
uint CommandId=(uint)CngpMessage.Command_Id.submit;
//
byte[] Message=null;
uint CommandStatus=0;
outSequence=sequence();
cngpMessage.Pack(CommandId,CommandStatus,outSequence,MessageBody,ref Message);
int SendBytes=cngpSocket.SendToIsmg(Message);
//
//mark time
//
this.RenewTime();
}
}
/// <summary>
/// submit的重载,增加返回的sequence
/// </summary>
/// <param name="spId">sp的企业代码</param>
/// <param name="subType">短消息子类型</param>
/// <param name="needReport">是否需要返回状态报告</param>
/// <param name="priority">发送级别</param>
/// <param name="serviceId">业务类型</param>
/// <param name="feeType">资费类型</param>
/// <param name="feeUserType">计费用户类型</param>
/// <param name="feeCode">金额</param>
/// <param name="msgFormat">短消息格式</param>
/// <param name="validTime">有效时间</param>
/// <param name="atTime">定时发送时间</param>
/// <param name="srcTermID">下行代码</param>
/// <param name="chargeTermID">计费用户号码</param>
/// <param name="destTermIDCount">短消息接收号码总数</param>
/// <param name="destTermID">短消息接收号码</param>
/// <param name="msgLength">短消息长度</param>
/// <param name="msgContent">短消息内容</param>
/// <param name="returnSequence">返回序列值</param>
public void Cngp_Submit(
string spId,
byte subType,
byte needReport,
byte priority,
string serviceId,
string feeType,
byte feeUserType,
string feeCode,
byte msgFormat,
string validTime,
string atTime,
string srcTermID,
string chargeTermID,
byte destTermIDCount,
string destTermID,
byte msgLength,
string msgContent,
uint returnSequence)
{
if(IsConnectedWithIsmg)
{
byte[] MessageBody=new byte[111+21*(int)destTermIDCount+(int)msgLength];
int i=0;//Cursor
cngpMessage.AddToBuffer(ref MessageBody,ref i,spId,10,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,subType);
cngpMessage.AddToBuffer(ref MessageBody,ref i,needReport);
cngpMessage.AddToBuffer(ref MessageBody,ref i,priority);
cngpMessage.AddToBuffer(ref MessageBody,ref i,serviceId,10,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,feeType,2,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,feeUserType);
cngpMessage.AddToBuffer(ref MessageBody,ref i,feeCode,6,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,msgFormat);
cngpMessage.AddToBuffer(ref MessageBody,ref i,validTime,17,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,atTime,17,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,srcTermID,21,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,chargeTermID,21,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,destTermIDCount);
cngpMessage.AddToBuffer(ref MessageBody,ref i,destTermID,destTermIDCount*21,CngpMessage.Character.ASCII);
cngpMessage.AddToBuffer(ref MessageBody,ref i,msgLength);
cngpMessage.AddToBuffer(ref MessageBody,ref i,msgContent,(int)msgLength,CngpMessage.Character.GB);
//
//--------------------------------pack---------------------------------------
uint CommandId=(uint)CngpMessage.Command_Id.submit;
//
byte[] Message=null;
uint CommandStatus=0;
cngpMessage.Pack(CommandId,CommandStatus,returnSequence,MessageBody,ref Message);
int SendBytes=cngpSocket.SendToIsmg(Message);
//
//mark time
//
this.RenewTime();
}
}
/// <summary>
/// 链路检测
/// </summary>
public void Cngp_Active_Test()
{
//MessageBody
byte[] MessageBody=new byte[0];
uint CommandStatus=0;
uint CommandId=(uint)CngpMessage.Command_Id.active_test;
byte[] Message=null;
cngpMessage.Pack(CommandId,CommandStatus,sequence(),MessageBody,ref Message);
int SendBytes=cngpSocket.SendToIsmg(Message);
//
//mark time
//
this.RenewTime();
}
/// <summary>
/// 发送active回复
/// </summary>
/// <param name="Sequence"></param>
public void Cngp_Active_Test_Resp(uint Sequence)
{
byte[] MessageBody=new byte[0];//包体
uint CommandStatus=0; //commandstatus Success
uint CommandId=(uint)CngpMessage.Command_Id.active_test_resp;//active_test_resp CommandId
byte[] Message=null;//包
cngpMessage.Pack(CommandId,CommandStatus,Sequence,MessageBody,ref Message);
int SendBytes=cngpSocket.SendToIsmg(Message);
}
/// <summary>
/// Deliver_Resp
/// </summary>
/// <param name="Sequence">序列号</param>
/// <param name="MessageBody">包体</param>
[LastModified("2006-03-14","使用事件处理当Mo累加,更新界面显示")]
[LastModified("2007-02-26","把状态报告写入数据库")]
[LastModified("2007-04-02","获取MessageId")]
private void Cngp_Deliver_Resp(uint Sequence,byte[] MessageBody)
{
try
{
//Cursor
int i=0;
//msgId
byte[] MsgID=new byte[10];
Array.Copy(MessageBody,0,MsgID,0,10);
//
//2007-04-03
//获取Messageid
string messageid=Encoding.ASCII.GetString(MsgID).Replace("\0","");
i+=10;
//isReport
byte IsReport=MessageBody[i];
i+=1;
//msgFormat
byte MsgFormat=MessageBody[i];
i+=1;
//ReceiveTime
byte[] RecvTime=new byte[14];
Array.Copy(MessageBody,i,RecvTime,0,14);
i+=14;
//短消息发送用户号码
//因为号码只有11位,所以会出现二进制的0,所以要替换
byte[] SrcTermID=new byte[21];
Array.Copy(MessageBody,i,SrcTermID,0,21);
string Mobileid=Encoding.ASCII.GetString(SrcTermID).Replace("\0","");
i+=21;
//短消息接收用户号码
byte[] DestTermID=new byte[21];
Array.Copy(MessageBody,i,DestTermID,0,21);
string SmsCode=Encoding.ASCII.GetString(DestTermID).Replace("\0","");
i+=21;
//短消息长度
byte MsgLength=MessageBody[i];
i+=1;
//短消息内容
byte[] MsgContent=new byte[(int)MsgLength];
Array.Copy(MessageBody,i,MsgContent,0,(int)MsgLength);
string Content=null;
switch(MsgFormat)
{
case((byte)CngpMessage.Character.ASCII):
Content=Encoding.ASCII.GetString(MsgContent).Replace("\0","");;
break;
case((byte)CngpMessage.Character.GB):
Content=Encoding.GetEncoding("GB2312").GetString(MsgContent).Replace("\0","");
break;
default:
Content=Encoding.Default.GetString(MsgContent).Replace("\0","");
break;
}
if(IsReport==1)
{
Logs.writeLog(Mobileid+":"+Content+":"+SmsCode,"Report");
//
//2007-02-26
//2007-4-3
//记录messageid
cngpSendMessage.InsertStatusReport(Mobileid,Content,messageid);
}
else
{
//logit
Logs.writeLog(Mobileid+":"+Content+":"+SmsCode,"Mo");
//insert into database
cngpSendMessage.InsertMORecord(SmsCode,Mobileid,Content);
}
//
//MO计数器累加
//
MOCount++;
//
//2006-03-14
//触发事件
//
MtchangeEventArgs moArg=new MtchangeEventArgs(MOCount);
if(MoOnChange!=null)
{
MoOnChange(this,moArg);
}
// //resp
uint CommandID=(uint)CngpMessage.Command_Id.deliver_resp;
uint CommandStatus=0;
byte[] Message=null;//package
cngpMessage.Pack(CommandID,CommandStatus,Sequence,MsgID,ref Message);
int SendBytes=cngpSocket.SendToIsmg(Message);
// Logs.writeLog("deliver_resp:"+SendBytes.ToString()+" bytes");
}
catch(Exception ex)
{
Logs.writeLog(ex.Message.ToString());
}
}
public Socket WorkSocket
{
get{return cngpSocket.WorkSocket;}
}
/// <summary>
/// 从数据库中获取数据
/// </summary>
[LastModified("2006-01-12","MT信息只允许在每天7:00-22:00之间发送信息")]
[LastModified("2006-03-13","增加对退出标志的判断,用于终止循环")]
public void GetDataFromOracle()
{
while(true)
{
try
{
//
//如果全局退出变量为true,那么停止Loop
//
if(quitFlag==true)
{
break;
}
lock(readytoSendArray)
{
if(readytoSendArray.Count<100)
{
int messageCount=cngpSendMessage.IfNoData("sendmessage2");
#if DEBUG
Logs.writeLog("messagecount sendmessage2:"+messageCount.ToString(),"debug");
#endif
if(messageCount>0)
{
string[][] message=oradata.GetData("sendpackage.send1",messageCount);
for(int i=0;i<message[1].Length;i++)
{
SendInfo Sendinfo=new SendInfo();
Sendinfo.Mobileid=message[0][i];
Sendinfo.Content=message[1][i];
Sendinfo.FeeType=message[2][i];
Sendinfo.FeeCode=message[3][i];
Sendinfo.ServiceId=message[4][i];
Sendinfo.SourceId=message[5][i];
Sendinfo.Priority=Convert.ToInt32(message[6][i]);
Sendinfo.SubType=2;
//
readytoSendArray.Add(Sendinfo);
}
}
}
//MT信息只允许在每天7:00-22:00之间发送信息
int hour=Convert.ToInt32(DateTime.Now.ToString("HH"));
if(hour<=22 && hour>=7)
{
if(readytoSendArray.Count<100)
{
int messageCount=cngpSendMessage.IfNoData("sendmessage4");
#if DEBUG
Logs.writeLog("messageCount sendmessage4:"+messageCount.ToString(),"debug");
#endif
if(messageCount>0)
{
string[][] message=oradata.GetData("sendpackage.send2",messageCount);
for(int i=0;i<message[1].Length;i++)
{
SendInfo Sendinfo=new SendInfo();
Sendinfo.Mobileid=message[0][i];
Sendinfo.Content=message[1][i];
Sendinfo.FeeType=message[2][i];
Sendinfo.FeeCode=message[3][i];
Sendinfo.ServiceId=message[4][i];
Sendinfo.SourceId=message[5][i];
Sendinfo.Priority=Convert.ToInt32(message[6][i]);
Sendinfo.SubType=3;
//
readytoSendArray.Add(Sendinfo);
#if DEBUG
Logs.writeLog(Sendinfo.Mobileid,"mobile");
#endif
}
}
}
}
}
if(readytoSendArray.Count>100 )
{
Thread.Sleep(2000);
}
else if(cngpSendMessage.IfNoData("sendmessage2")==0 && cngpSendMessage.IfNoData("sendmessage4")==0)
{
Thread.Sleep(2000);
}
}
catch(Exception ex)
{
Logs.writeLog(ex.Message.ToString(),false);
Logs.writeLog(ex.StackTrace.ToString(),false);
Logs.writeLog(ex.TargetSite.ToString(),false);
Logs.writeLog(ex.Source.ToString(),false);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -