private void PduRequestProcessorCallback(RequestPdu pdu) { ResponsePdu resp = null; if (pdu is Unbind) { resp = pdu.CreateDefaultResponce(); try { SendPduBase(resp); } catch { /*silent catch*/ } EndSession(SmppSessionCloseReason.UnbindRequested, null); return; } resp = RaisePduReceivedEvent(pdu); if (resp == null) { if (pdu.HasResponse) { resp = pdu.CreateDefaultResponce(); } } if (resp != null) { try { SendPduBase(resp); } catch { /*Silent catch*/ } } }
public ResponsePdu SendPdu(RequestPdu pdu) { int timeout = 0; lock (_vSyncRoot) { timeout = _vDefaultResponseTimeout; } return(SendPdu(pdu, timeout)); }
public IAsyncResult BeginSendPdu(RequestPdu pdu, AsyncCallback callback, object @object) { int timeout = 0; lock (_vSyncRoot) { timeout = _vDefaultResponseTimeout; } return(BeginSendPdu(pdu, timeout, callback, @object)); }
public ResponsePdu WaitResponse(RequestPdu pdu, int timeOut) { uint sequenceNumber = pdu.Header.SequenceNumber; ResponsePdu resp = FetchResponse(sequenceNumber); if (resp != null) { return(resp); } if (timeOut < 5000) { timeOut = _vDefaultResponseTimeout; } PduWaitContext waitContext = new PduWaitContext(sequenceNumber, timeOut); _vWaitingEvent.WaitOne(); try { _vWaitingQueue.Add(waitContext); } finally { _vWaitingEvent.Set(); } waitContext.WaitForAlert(); resp = FetchResponse(sequenceNumber); if (resp == null) { throw new SmppResponseTimedOutException(); } return(resp); }
private ResponsePdu RaisePduReceivedEvent(RequestPdu pdu) { /* * PduReceived event is not raised asynchronously as this method is * being called asynchronously by a worker thread from the thread pool. */ if (PduReceived == null) { return(null); } PduReceivedEventArgs e = new PduReceivedEventArgs(pdu); PduReceived(this, e); return(e.Response); }
private void PduErrorEventHandler(object sender, PduErrorEventArgs e) { ResponsePdu resp = null; if (e.Pdu is RequestPdu) { RequestPdu req = (RequestPdu)e.Pdu; resp = req.CreateDefaultResponce(); resp.Header.ErrorCode = e.Exception.ErrorCode; } else { resp = new GenericNack(e.Header); resp.Header.ErrorCode = e.Exception.ErrorCode; } try { SendPduBase(resp); } catch { /*silent catch*/ } }
public ResponsePdu SendPdu(RequestPdu pdu, int timeout) { SendPduBase(pdu); if (pdu.HasResponse) { try { return(_vRespHandler.WaitResponse(pdu, timeout)); } catch (SmppResponseTimedOutException) { if (_vTraceSwitch.TraceWarning) { Trace.WriteLine("200016:PDU send operation timed out;"); } throw; } } else { return(null); } }
public IAsyncResult BeginSendPdu(RequestPdu pdu, int timeout, AsyncCallback callback, object @object) { return(_vCallback.BeginInvoke(pdu, timeout, callback, @object)); }
public ResponsePdu WaitResponse(RequestPdu pdu) { return(WaitResponse(pdu, _vDefaultResponseTimeout)); }
public PduReceivedEventArgs(RequestPdu request) { _vRequest = request; }