📄 cmppspclient.cs
字号:
private void SendSPMsgThread()
{
while (!this.isStop)
{
Thread.Sleep(10);
if (this.isLogin)
{
ArrayList lists = this.getTop16Queue(); //取出16条最顶的消息
if (lists != null && lists.Count > 0)
{
int count = lists.Count;
ArrayList pks = new ArrayList(count); //定义容量
for (int i = 0; i < lists.Count; i++)
{
QueueItem outitem = (QueueItem) lists[i]; //取出每一个消息对象
if (outitem != null)
{
try
{
sendQueueItem(outitem); //发送每一个消息
}
catch (SocketException se)
{
//发送失败
outitem.FailedCount++;
}
}
}
}
}
Thread.Sleep(100);
}
}
private void _StopMe()
{
lock (this)
{
this.isStop = true;
}
}
private void _forcedSubThread(Thread t) //强制停止线程
{
try
{
t.Abort();
t.Join();
}
catch (Exception)
{ }
}
//private 函数区域//////////////////////////////////////////////////////////////////
//公用函数 属性区域////////////////////////////////////////
public bool Init(string CMPPServer, int CMPPPort)
{
return (this._init(CMPPServer, CMPPPort));
}
public bool Init(string CMPPServer, int CMPPPort, int recvtimeout, int sendtimeout)
{
this.RecvTimeOut = recvtimeout;
this.SendTimeout = sendtimeout;
return (this._init(CMPPServer, CMPPPort));
}
public bool Init(string CMPPServer, int CMPPPort, int recvtimeout)
{
this.RecvTimeOut = recvtimeout;
this.SendTimeout = recvtimeout;
return (this._init(CMPPServer, CMPPPort));
}
public bool Login(string SystemID, string UserName, string Password)
{
try
{
SendLogin(SystemID, UserName, Password);
this.LogLastOkTime(DateTime.Now); //最后一次正确的发送
}
catch (SocketException se)
{
//发送出错
this.ErrorInfo = this.ErrorInfo + "\r\n" + se.ToString();
return (false);
}
DateTime t1 = DateTime.Now;
while (!this.isLogin)
{
byte[] rbuf = new Byte[400];
int l;
try
{
l = tcp.Receive(rbuf);
if (l > 16)
{
if (BIConvert.Bytes2UInt(rbuf, 4) == (uint) MSG.CMPP_COMMAND_ID.CMPP_CONNECT_RESP)
{
MSG.CMPP_MSG_CONNECT_RESP resp = new MSG.CMPP_MSG_CONNECT_RESP(rbuf);
if (resp.isOk)
{
EventArgs e = new EventArgs();
if (onLogonSuccEventHandler != null)
{
onLogonSuccEventHandler(this, e);
}
else
{
this.defaultConnectRespEventHandler();
}
this.isLogin = true;
}
else
{
}
break;
}
}
this._lastOkTime = DateTime.Now; //更新当前最后成功收发套接字的时间
}
catch (SocketException)
{
}
System.TimeSpan t = DateTime.Now - t1;
if (t.TotalSeconds > 10)
{
break;
}
}
if (this.isLogin)
{ //登录ok,就立即发送active_test包
this.ErrorInfo = this.ErrorInfo + "\r\n" + " Logon succ! ";
startThreads(); // 启动 主监视程序de线程
return (true);
}
else
{
return (false);
}
}
public uint SubmitSMS(string to_user, string fee_code, string svc_code, string fee_user, string spnum, string content, int fee_usertype)
{
MSG.CMPP_MSG_SUBMIT sndmsg;
uint seq = this.getNextSequence(); //取得下一个sequence
sndmsg = new MSG.CMPP_MSG_SUBMIT(seq);
sndmsg.FeeCode = fee_code;
sndmsg.FeeTerminalId = to_user;
sndmsg.FeeType = MSG.FeeType.FEE_TERMINAL_PERITEM; //按条收取
sndmsg.FeeUserType = fee_usertype;
sndmsg.Msg_Level = 0;
sndmsg.MSGFormat = (uint) MSG.Msg_Format.UCS2;
sndmsg.SMS_Content = content;
sndmsg.SrcID = spnum; //长号码
sndmsg.SPID = this.systemID;
sndmsg.Svc_Code = svc_code;
sndmsg.UDHI = 0;
sndmsg.ValIdTime = getValIdTime(DateTime.Now); //存活时间
sndmsg.addTerminalID(to_user);
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_SUBMIT, 0, 0);
q.setmsgObj(sndmsg);
this.addToOutQueue(q);
return (seq);
}
public uint SendMsg(string to_user, string fee_user, string fee, string svccode, string content, string spnum)
{
uint seq = this.getNextSequence();
MSG.CMPP_MSG_SUBMIT sndmsg = new MSG.CMPP_MSG_SUBMIT(seq);
sndmsg.FeeCode = fee;
sndmsg.FeeType = MSG.FeeType.FEE_TERMINAL_PERITEM;
sndmsg.FeeTerminalId = fee_user;
sndmsg.FeeUserType = (int) MSG.FeeUserType.FEE_NULL; //计费 按照计费号码计费
sndmsg.SPID = this.systemID; //企业代码
sndmsg.UDHI = 0; //
sndmsg.MSGFormat = (uint) MSG.Msg_Format.GB2312;
sndmsg.SMS_Content = content;
sndmsg.SrcID = spnum;
sndmsg.Svc_Code = svccode;
sndmsg.addTerminalID(to_user);
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_SUBMIT, 0, 0);
q.setmsgObj(sndmsg);
this.addToOutQueue(q);
return (seq);
}
public uint SendSMC(string fee_user, string feecode, string svccode) //向计费用户发送一条包月计费信息
{
uint seq = this.getNextSequence();
MSG.CMPP_MSG_SUBMIT sndmsg = new MSG.CMPP_MSG_SUBMIT(seq);
sndmsg.SMS_Delivery_Type = 2; //产生包月SMC
sndmsg.FeeCode = feecode;
sndmsg.FeeType = MSG.FeeType.FEE_TERMINAL_MONTH; //包月计费
sndmsg.FeeTerminalId = fee_user;
sndmsg.FeeUserType = (int) MSG.FeeUserType.FEE_TERMINAL_ID; //计费 按照计费号码计费
sndmsg.SPID = this.systemID; //企业代码
sndmsg.UDHI = 0; //
sndmsg.MSGFormat = (uint) MSG.Msg_Format.UCS2;
sndmsg.SMS_Content = "SMC";
sndmsg.SrcID = this.userName; //sp的特符号码
sndmsg.Svc_Code = svccode;
sndmsg.addTerminalID(fee_user);
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_SUBMIT, 0, 0);
q.setmsgObj(sndmsg);
this.addToOutQueue(q);
return (seq);
}
public uint SendSMT(string to_user, string feecode, string svccode, string spnum, string content)
{
uint seq = this.getNextSequence();
MSG.CMPP_MSG_SUBMIT sndmsg = new MSG.CMPP_MSG_SUBMIT(seq);
sndmsg.SMS_Delivery_Type = 1; //产生包月SMC
sndmsg.FeeCode = feecode; //包月计费代码
sndmsg.FeeType = MSG.FeeType.FEE_TERMINAL_MONTH; //包月计费
sndmsg.FeeTerminalId = to_user;
sndmsg.FeeUserType = (int) MSG.FeeUserType.FEE_TERMINAL_ID; //计费 按照计费号码计费
sndmsg.SPID = this.systemID; //企业代码
sndmsg.UDHI = 0; //
sndmsg.MSGFormat = (uint) MSG.Msg_Format.UCS2;
sndmsg.SMS_Content = content;
sndmsg.SrcID = spnum; //sp的特符号码
sndmsg.Svc_Code = svccode;
sndmsg.addTerminalID(to_user);
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_SUBMIT, 0, 0);
q.setmsgObj(sndmsg);
this.addToOutQueue(q);
return (seq);
}
public uint SendQuery(string svccode, string whichday) //查询某个业务的总计数
{
string wd = whichday.Trim();
int query_type = 0;
if (svccode == null || svccode.CompareTo("") == 0)
{//查询全部页数量
}
else
{//查询某项业务
query_type = 1;
}
if (wd == null || wd.CompareTo("") == 0)
{
DateTime d = DateTime.Now;
wd = d.Year.ToString() + d.Month.ToString().PadLeft(2, '0') + d.Day.ToString().PadLeft(2, '0');
}
uint seq = this.getNextSequence();
MSG.CMPP_MSG_QUERY query = new MSG.CMPP_MSG_QUERY(seq);
query.Query_Type = query_type;
query.Query_Code = svccode;
query.Time = wd; //设定那一天
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_QUERY, 0, 0);
q.setmsgObj(query);
this.addToOutQueue(q);
return (seq); //返回消息的内部编号
}
public uint StopCMPPConnection() //停止CMPP协议的socket连接
{
uint seq = this.getNextSequence();
MSG.CMPP_MSG_TERMINATE t = new MSG.CMPP_MSG_TERMINATE(seq);
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_TERMINATE, 0, 0);
q.setmsgObj(t);
this.addToOutQueue(q);
return (seq); //返回终止消息,便于等待
}
public uint CancelMsg(string msgid)
{
uint seq = this.getNextSequence();
MSG.CMPP_MSG_CANCEL cancel = new MSG.CMPP_MSG_CANCEL(seq);
cancel.MsgID = msgid;
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_CANCEL, 0, 0);
q.setmsgObj(cancel);
this.addToOutQueue(q);
return (seq); //返回消息的内部编号
}
public void StopMe()
{
if (!this.isStop)
{
if (this.tcpIsCanUse())//发送一条对服务器的通告
{
uint seq = this.getNextSequence();
MSG.CMPP_MSG_TERMINATE t = new MSG.CMPP_MSG_TERMINATE(seq);
QueueItem q = new QueueItem(seq, (uint) MSG.CMPP_COMMAND_ID.CMPP_TERMINATE, 0, 0);
q.setmsgObj(t);
this.addToOutQueue(q);
}
Thread.Sleep(500); //等待1000ms,告知服务器
this._StopMe();
tcp.Close();
if (this.onClientSvcStopedHandler != null)
{
ClientQueueStateArgs arg = new ClientQueueStateArgs(this._outSeqQueue, this._waitingSeqQueue);
onClientSvcStopedHandler(this, arg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -