void SendReqPdu(ISmppPdu RequestPdu, ref SmppAsyncObject AsyncObject) { if (RequestPdu.Header.SequenceNumber == 0) { RequestPdu.Header.SequenceNumber = GetSequenceNumber(); } AsyncObject.mre = new ManualResetEvent(false); AddPendingResponse(RequestPdu.Header.SequenceNumber, AsyncObject); if (TcpConnection.Send(RequestPdu.ToByteArray()) <= 0) { RemovePendingResponse(RequestPdu.Header.SequenceNumber); TcpConnection.Disconnect(); throw new Exception("Invalid connection State"); } if (!AsyncObject.mre.WaitOne(Settings.Timeout, false) || (AsyncObject.PduRes == null)) { RemovePendingResponse(RequestPdu.Header.SequenceNumber); if (Settings.DisconnectOnTimeout) { TcpConnection.Disconnect(); } throw new SmppTimeOutException(); } var header = new SmppHeader(AsyncObject.PduRes); if (header.CommandId == -2147483648) { RemovePendingResponse(RequestPdu.Header.SequenceNumber); throw new SmppGenericNackException(SmppStatusCodes.GetDescription(RequestPdu.Header.CommandStatus)); } RemovePendingResponse(RequestPdu.Header.SequenceNumber); }
internal void InitializeAsyncTransac(ISmppPdu RequestObj, object Callback, object State) { if (RequestObj.Header.SequenceNumber == 0) { RequestObj.Header.SequenceNumber = GetSequenceNumber(); } var obj2 = new SmppAsyncObject(Callback, State, RequestObj, Settings.Timeout); obj2.CompletionCallback = ProcessAsyncPdu; lock (PendingResponse.SyncRoot) { lock (PendingQueue.SyncRoot) { obj2.StartTimer(); if (PendingResponse.Count < Settings.WindowSize) { PendingResponse.Add(RequestObj.Header.SequenceNumber, obj2); try { SendResPdu(RequestObj.ToByteArray()); goto Label_00ED; } catch { PendingResponse.Remove(RequestObj.Header.SequenceNumber); throw; } } PendingQueue.Add(obj2); } Label_00ED: ; } }
public SmppAsyncObject(object CallBack, object State, ISmppPdu Request, int Timeout) { this.Timeout = 0x7530; SyncRoot = new object(); AsyncState = SmppAsyncState.Enabled; Callback = CallBack; this.State = State; this.Request = Request; this.Timeout = Timeout; }
void SendReqPdu(ISmppPdu RequestPdu, ref SmppAsyncObject AsyncObject) { if (RequestPdu.Header.SequenceNumber == 0) RequestPdu.Header.SequenceNumber = GetSequenceNumber(); AsyncObject.mre = new ManualResetEvent(false); AddPendingResponse(RequestPdu.Header.SequenceNumber, AsyncObject); if (TcpConnection.Send(RequestPdu.ToByteArray()) <= 0) { RemovePendingResponse(RequestPdu.Header.SequenceNumber); TcpConnection.Disconnect(); throw new Exception("Invalid connection State"); } if (!AsyncObject.mre.WaitOne(Settings.Timeout, false) || (AsyncObject.PduRes == null)) { RemovePendingResponse(RequestPdu.Header.SequenceNumber); if (Settings.DisconnectOnTimeout) TcpConnection.Disconnect(); throw new SmppTimeOutException(); } var header = new SmppHeader(AsyncObject.PduRes); if (header.CommandId == -2147483648) { RemovePendingResponse(RequestPdu.Header.SequenceNumber); throw new SmppGenericNackException(SmppStatusCodes.GetDescription(RequestPdu.Header.CommandStatus)); } RemovePendingResponse(RequestPdu.Header.SequenceNumber); }
internal void InitializeAsyncTransac(ISmppPdu RequestObj, object Callback, object State) { if (RequestObj.Header.SequenceNumber == 0) RequestObj.Header.SequenceNumber = GetSequenceNumber(); var obj2 = new SmppAsyncObject(Callback, State, RequestObj, Settings.Timeout); obj2.CompletionCallback = ProcessAsyncPdu; lock (PendingResponse.SyncRoot) { lock (PendingQueue.SyncRoot) { obj2.StartTimer(); if (PendingResponse.Count < Settings.WindowSize) { PendingResponse.Add(RequestObj.Header.SequenceNumber, obj2); try { SendResPdu(RequestObj.ToByteArray()); goto Label_00ED; } catch { PendingResponse.Remove(RequestObj.Header.SequenceNumber); throw; } } PendingQueue.Add(obj2); } Label_00ED: ; } }