public NetworkMessage CreateNetworkMessage(BinaryReader reader) { uint byteCount = reader.NetworkReadUInt32(); CmppCommands command = (CmppCommands)reader.NetworkReadUInt32(); uint sequenceId = reader.NetworkReadUInt32(); CmppMessage message = null; switch (command) { case CmppCommands.Connect: message = new CmppMessageConnect(); break; case CmppCommands.ConnectResponse: message = new CmppMessageConnectResponse(); break; case CmppCommands.Submit: message = new CmppMessageSubmit(); break; case CmppCommands.SubmitResponse: message = new CmppMessageSubmitResponse(); break; case CmppCommands.Deliver: message = new CmppMessageDeliver(); break; case CmppCommands.DeliverResponse: message = new CmppMessageDeliverResponse(); break; case CmppCommands.ActiveTest: message = new CmppMessageActiveTest(); break; case CmppCommands.ActiveTestResponse: message = new CmppMessageActiveTestResponse(); break; case CmppCommands.Terminate: message = new CmppMessageTerminate(); break; default: message = new CmppMessage(); break; } //end switch if (message != null) { message.Command = command; message.ByteCount = byteCount; message.SequenceId = sequenceId; message.NetworkRead(reader); } return(message); }
private async Task SendPrintUplinkMessageAsync(Random random) { SmsServerSessionlist = GetSmsServerSessions(); for (int i = 0; i < SmsServerSessionlist.Count; i++) { var session = SmsServerSessionlist[i]; CmppMessageDeliver deliver = new CmppMessageDeliver() { Content = "content" + String.Format("_{0:00000}", random.Next(1000000)), Format = (byte)CmppEncodings.UCS2, LinkId = string.Empty, ReceiverId = "10690", ServiceId = session.Server.Configurations.ServiceID }; int[] digit = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; string mobile = String.Empty; StringBuilder sbMobile = new StringBuilder("13"); while (true) { sbMobile.Append(digit[random.Next(0, 9)]); mobile = sbMobile.ToString(); if (sbMobile.Length == 11) { deliver.ServiceTerminalId = mobile; break; } } deliver.CalculateContentByteCount(CmppEncodings.UCS2); var result = await session.SendCmppUplinkAsync(deliver); var sb = new StringBuilder(); if (result) { sb.AppendLine(); sb.AppendFormat("Content: {0}; ", deliver.Content); sb.AppendFormat("Mobile: {0}; ", deliver.ServiceTerminalId); sb.AppendFormat("ReceiverId: {0}; ", deliver.ReceiverId); sb.AppendFormat("ServiceId: {0}", deliver.ServiceId); sb.AppendLine(); } Console.WriteLine(sb.ToString()); } ; }
public static async Task <bool> SendCmppReportAsync(this SmsServerSession session, CmppMessageReport report) { var cmppServer = session.Server as CmppSmsServer; var serviceId = cmppServer.Configurations.ServiceID; var d = new CmppMessageDeliver() { SequenceId = session.SequenceId, Id = report.Id, Format = (byte)CmppEncodings.ASCII, ReceiverId = report.ReceiverTerminalId, ServiceId = serviceId, DeliveryReportRequired = 1, ServiceTerminalId = serviceId, LinkId = string.Empty }; d.SetReport(report); return(await session.SendAsync(d)); }
private async Task DoReceiveDeliverAsync(CmppMessageDeliver message) { if (message.DeliveryReportRequired == 0) //up link request { this.RaiseDeliverReceived(message); } else //deliver report { var report = message.GetReport(); this.RaiseReportReceived(report); } CmppMessageDeliverResponse response = new CmppMessageDeliverResponse() { SequenceId = message.SequenceId, MessageId = message.Id, Result = 0 }; await this.Send(response); }
protected override async Task DoNetworkMessageReceived(SmsServerSession session, NetworkMessage message) { if (message is CmppMessageConnect) { var m = message as CmppMessageConnect; var r = new CmppMessageConnectResponse(); r.SequenceId = m.SequenceId; r.Version = 0x30; r.AuthenticatorISMG = new byte[16]; r.Status = 0; await session.SendAsync(r); } else if (message is CmppMessageSubmit) { var m = message as CmppMessageSubmit; var r = new CmppMessageSubmitResponse(); r.SequenceId = m.SequenceId; r.MessasgeId = this.GetMessageId(); r.Result = 0; await session.SendAsync(r); var time = DateTime.Now; var report = new CmppMessageReport() { Id = r.MessasgeId, Stat = "DELIVRD", ReceiverTerminalId = m.ReceiverTerminalIds[0], CompleteTime = time.AddMinutes(20).ToString("yyMMddHHmm"), SubmitTime = time.ToString("yyMMddHHmm"), SmscSequence = 0, }; var d = new CmppMessageDeliver() { SequenceId = this.SequenceId, Id = r.MessasgeId, Format = (byte)CmppEncodings.ASCII, ReceiverId = m.ReceiverTerminalIds[0], ServiceId = _serviceId, DeliveryReportRequired = 1,//ηΆζζ₯ε ServiceTerminalId = _serviceId, LinkId = string.Empty }; d.SetReport(report); await session.SendAsync(d); lock (this) { _submitCount++; var stamp = DateTime.Now; if (_startStamp == DateTime.MinValue) { _startStamp = stamp; } _endStamp = stamp; var tick = (long)(_endStamp - _startStamp).TotalSeconds; if (tick != _reportTick) { _reportTick = tick; Console.WriteLine("{0}: {1}...", _submitCount, stamp.ToLongTimeString()); } } } else if (message is CmppMessageActiveTest) { var m = message as CmppMessageActiveTest; var r = new CmppMessageActiveTestResponse(); r.SequenceId = m.SequenceId; await session.SendAsync(r); } }
public static async Task <bool> SendCmppUplinkAsync(this SmsServerSession session, CmppMessageDeliver deliver) { if (session == null) { return(false); } deliver.SequenceId = session.SequenceId; return(await session.SendAsync(deliver)); }
public static void CalculateContentByteCount(this CmppMessageDeliver message, CmppEncodings encoding) { var byteCount = GetEncoding(encoding).GetByteCount(message.Content); message.ContentByteCount = (byte)byteCount; }