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