示例#1
0
        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);
        }
示例#2
0
        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());
            }
            ;
        }
示例#3
0
        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));
        }
示例#4
0
        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);
        }
示例#5
0
        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);
            }
        }
示例#6
0
 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));
 }
示例#7
0
        public static void CalculateContentByteCount(this CmppMessageDeliver message, CmppEncodings encoding)
        {
            var byteCount = GetEncoding(encoding).GetByteCount(message.Content);

            message.ContentByteCount = (byte)byteCount;
        }