Пример #1
0
 private async Task DoReceiveSubmitResponse(SgipMessageSubmitResponse response)
 {
     await Task.Run(() =>
     {
         SmsMessageEnvolope envolope = null;
         this.MessageRecords.TryRemove(response.SequenceId,
                                       out envolope);
         if (envolope != null)
         {
             envolope.Response = response;
             this.RaiseResponseReceived(envolope);
         }
     });
 }
Пример #2
0
        public NetworkMessage CreateNetworkMessage(BinaryReader reader)
        {
            uint         byteCount = reader.NetworkReadUInt32();
            SgipCommands command   = (SgipCommands)reader.NetworkReadUInt32();
            SgipMessage  message   = null;

            uint sid3 = reader.NetworkReadUInt32();
            uint sid2 = reader.NetworkReadUInt32();
            uint sid1 = reader.NetworkReadUInt32();

            switch (command)
            {
            case SgipCommands.BindResponse:
                message = new SgipMessageBindResponse();
                break;

            case SgipCommands.Bind:
                message = new SgipMessageBind();
                break;

            case SgipCommands.Unbind:
                message = new SgipMessageUnbind();
                break;

            case SgipCommands.UnbindResponse:
                message = new SgipMessageUnbindResponse();
                break;

            case SgipCommands.Submit:
                message = new SgipMessageSubmit();
                break;

            case SgipCommands.SubmitResponse:
                message = new SgipMessageSubmitResponse();
                break;

            case SgipCommands.Deliver:     //receive sms
                message = new SgipMessageDeliver();
                break;

            case SgipCommands.DeliverResponse:
                message = new SgipMessageDeliverResponse();
                break;

            case SgipCommands.Report:
                message = new SgipMessageReport();
                break;

            case SgipCommands.ReportResponse:
                message = new SgipMessageReportResponse();
                break;

            case SgipCommands.None:
            default:
                message = new SgipMessage();
                break;
            }

            if (message != null)
            {
                message.Command     = command;
                message.ByteCount   = byteCount;
                message.SequenceId1 = sid1;
                message.SequenceId2 = sid2;
                message.SequenceId3 = sid3;
                message.NetworkRead(reader);
            }

            return(message);
        }
Пример #3
0
        protected override async Task DoNetworkMessageReceived(SmsServerSession session, NetworkMessage message)
        {
            if (message is SgipMessageBind)
            {
                var m = message as SgipMessageBind;
                var r = new SgipMessageBindResponse();
                r.SequenceId1 = m.SequenceId1;
                r.SequenceId2 = m.SequenceId2;
                r.SequenceId3 = m.SequenceId3;
                r.Status      = 0;
                await session.SendAsync(r);
            }
            else if (message is SgipMessageSubmit)
            {
                var m = message as SgipMessageSubmit;
                var r = new SgipMessageSubmitResponse();

                r.SequenceId1 = m.SequenceId1;
                r.SequenceId2 = m.SequenceId2;
                r.SequenceId3 = m.SequenceId3;
                r.Result      = 0;

                await session.SendAsync(r);

                var report = new SgipMessageReport();

                var sids = this.SequenceId;
                report.SequenceId3 = sids[0];
                report.SequenceId2 = sids[1];
                report.SequenceId1 = sids[2];

                report.SubmitSequenceId3 = m.SequenceId3;
                report.SubmitSequenceId2 = m.SequenceId2;
                report.SubmitSequenceId1 = m.SequenceId1;
                report.State             = 0;
                report.ErrorCode         = 0;
                report.ReceiverNumber    = m.ReceiverNumbers[0];
                report.ReportRequired    = 1;

                await this.Client.SendReportAsync(report);

                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());
                    }
                }
            }


            await Task.Delay(0);
        }