public IAsyncResult BeginHangUp(AsyncCallback callback, object state) { try { Message request = null; switch (_status) { case ConnectionStatus.Connected: case ConnectionStatus.B_ConnectPending: _inititator = true; request = new DisconnectB3Request(_ncci); break; case ConnectionStatus.D_Connected: case ConnectionStatus.D_ConnectPending: case ConnectionStatus.B_DisconnectPending: _inititator = true; request = new DisconnectRequest(_plci); break; default: throw Error.NotSupported(); } MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _application.SendRequestMessage(result); return(result); } catch (Exception e) { Trace.TraceError("Connection#{0}::BeginHangUp, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }
internal override void Notify(CapiApplication application, MessageAsyncResult result) { Controller controller = application.GetControllerByID(Identifier.ControllerID); Connection connection = controller.GetConnectionByPLCI(Identifier.PLCI); connection.DataB3Confirmation(this, result); }
internal override void Notify(CapiApplication application, MessageAsyncResult result) { Connection connection = result.Caller as Connection; if (connection != null) { connection.FacilityConfirmation(this, result); } }
internal override void Notify(CapiApplication application) { MessageAsyncResult result = application.GetMessageAsyncResult(Number); if (result != null) { Notify(application, result); application.RemoveMessageAsyncResult(Number); } }
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { IntPtr ptr = IntPtr.Zero; try { if (buffer == null) { throw new ArgumentNullException("buffer"); } if (offset < 0 || offset > short.MaxValue) { throw new ArgumentOutOfRangeException("offset"); } // data block cannot be bigger than the value which we used in CAPI_REGISTER call. if (count < 0 || count > _connection.Application.BDataLenght) { throw new ArgumentOutOfRangeException("count"); } if ((buffer.Length - offset) < count) { throw new ArgumentException("Invalid offset"); } if (_connection.Status != ConnectionStatus.Connected) { throw new NotSupportedException(); } Debug.Assert(count <= short.MaxValue); if (count >= short.MaxValue) { throw new NotSupportedException(); } ptr = Marshal.AllocHGlobal(count); Marshal.Copy(buffer, offset, ptr, count); // build request DataB3Request request = new DataB3Request(); request.Identifier.NCCI = _connection.NCCI; request.Data = ptr; request.DataLength = (short)count; _dataHandle++; request.DataHandle = _dataHandle; MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _connection.Application.SendRequestMessage(result); return(result); } catch (Exception e) { Trace.TraceError("Connection#{0}::BeginWriteData, Exception = {1}", ValidationHelper.HashString(this), e); // clean memory if (ptr != IntPtr.Zero) { Marshal.FreeHGlobal(ptr); } throw; } }
internal void ListenConfirmation(ListenConfirmation confirmation, MessageAsyncResult result) { if (confirmation.Succeeded) { result.InvokeCallback(); } else { result.InvokeCallback(new CapiException(confirmation.Info)); } }
private void RequestDTFM(FacilityRequest request) { MessageAsyncResult result = new MessageAsyncResult(this, request, null, null); ThreadPool.QueueUserWorkItem(RequestWaitCallback, result); object o = result.InternalWaitForCompletion(); if (o is Exception) { throw ((Exception)o); } }
internal void DataB3Confirmation(DataB3Confirmation confirmation, MessageAsyncResult result) { Trace.TraceInformation("Connection#{0}::DataB3Confirmation, Info = {0}", confirmation.Info); if (confirmation.Succeeded) { result.InvokeCallback(); } else { result.InvokeCallback(new CapiException(confirmation.Info)); } }
internal void DisconnectConfirmation(DisconnectConfirmation confirmation, MessageAsyncResult result) { Trace.TraceInformation("Connection#{0}::DisconnectConfirmation, Info = {0}", confirmation.Info); if (confirmation.Succeeded) { this.Status = ConnectionStatus.D_DisconnectPending; result.InvokeCallback(); } else { result.InvokeCallback(new CapiException(confirmation.Info)); } }
public IAsyncResult BeginListen(CIPMask service, AsyncCallback callback, object state) { try { ListenRequest request = new ListenRequest(_id); request.CIPMask = service; MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _application.SendRequestMessage(result); return(result); } catch (Exception e) { Trace.TraceError("Controller#{0}::BeginListen, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }
internal void ConnectB3Confirmation(ConnectB3Confirmation confirmation, MessageAsyncResult result) { Trace.TraceInformation("Connection#{0}::ConnectB3Confirmation, Info = {0}", confirmation.Info); if (confirmation.Succeeded) { _ncci = confirmation.Identifier.NCCI; Status = ConnectionStatus.B_ConnectPending; result.InvokeCallback(); } else { result.InvokeCallback(new CapiException(confirmation.Info)); } }
internal void AlertConfirmation(AlertConfirmation confirmation, MessageAsyncResult result) { Trace.TraceInformation("Controller#{0}::AlertConfirmation, Info = {0}", confirmation.Info); if (result != null) { if (confirmation.Succeeded) { result.InvokeCallback(); } else { result.InvokeCallback(new CapiException(confirmation.Info)); } } }
internal void ConnectConfirmation(ConnectConfirmation confirmation, MessageAsyncResult result) { if (confirmation.Succeeded) { ConnectRequest request = (ConnectRequest)result.Request; Connection connection = new Connection(_application, this, confirmation.Identifier.PLCI, request.CalledPartyNumber, request.CallingPartyNumber); Connections.InternalAdd(connection); connection.Inititator = true; connection.Status = ConnectionStatus.D_ConnectPending; result.InvokeCallback(connection); } else { result.InvokeCallback(new CapiException(confirmation.Info)); } }
public void EndHangUp(IAsyncResult asyncResult) { try { MessageAsyncResult result = asyncResult as MessageAsyncResult; if (asyncResult == null || result == null) { throw (asyncResult == null) ? new ArgumentNullException("asyncResult") : new ArgumentException(); } object o = result.InternalWaitForCompletion(); if (o is Exception) { throw ((Exception)o); } } catch (Exception e) { Trace.TraceError("Connection#{0}::EndHangUp, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }
public IAsyncResult BeginConnect(string callingPartyNumber, string calledPartyNumber, CIPServices service, B1Protocol b1, B2Protocol b2, B3Protocol b3, AsyncCallback callback, object state) { try { ConnectRequest request = new ConnectRequest(_id); UInt16 CIPValue = 0; int s = (int)service; if (s != 0) { do { if ((s & 1) != 0) { break; } s >>= 1; CIPValue++; } while (CIPValue < 31); } request.CIPValue = CIPValue; request.CalledPartyNumber = calledPartyNumber; request.CallingPartyNumber = callingPartyNumber; request.BPtotocol.B1 = b1; request.BPtotocol.B2 = b2; request.BPtotocol.B3 = b3; MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _application.SendRequestMessage(result); _status = ControllerStatus.Connecting; return(result); } catch (Exception e) { Trace.TraceError("Controller#{0}::BeginListen, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }
public override void EndWrite(IAsyncResult asyncResult) { try { MessageAsyncResult result = asyncResult as MessageAsyncResult; if (asyncResult == null || result == null) { throw (asyncResult == null) ? new ArgumentNullException("asyncResult") : new ArgumentException(); } object o = result.InternalWaitForCompletion(); DataB3Request request = (DataB3Request)result.Request; IntPtr ptr = request.Data; if (ptr != IntPtr.Zero) { Marshal.FreeHGlobal(ptr); } if (o is Exception) { throw ((Exception)o); } } catch (Exception e) { Trace.TraceError("Connection#{0}::EndWriteData, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }
internal abstract void DisconnectB3Confirmation(DisconnectB3Confirmation confirmation, MessageAsyncResult result);
internal override void Notify(CapiApplication application, MessageAsyncResult result) { Controller c = (Controller)result.Caller; c.AlertConfirmation(this, result); }
public IAsyncResult BeginConnect(string callingPartyNumber, string calledPartyNumber, CIPServices service, B1Protocol b1, B2Protocol b2, B3Protocol b3, AsyncCallback callback, object state) { try { ConnectRequest request = new ConnectRequest(_id); UInt16 CIPValue = 0; int s = (int)service; if (s != 0) { do { if ((s & 1) != 0) break; s >>= 1; CIPValue++; } while (CIPValue < 31); } request.CIPValue = CIPValue; request.CalledPartyNumber = calledPartyNumber; request.CallingPartyNumber = callingPartyNumber; request.BPtotocol.B1 = b1; request.BPtotocol.B2 = b2; request.BPtotocol.B3 = b3; MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _application.SendRequestMessage(result); _status = ControllerStatus.Connecting; return result; } catch (Exception e) { Trace.TraceError("Controller#{0}::BeginListen, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }
internal abstract void DataB3Confirmation(DataB3Confirmation confirmation, MessageAsyncResult result);
internal abstract void FacilityConfirmation(FacilityConfirmation confirmation, MessageAsyncResult result);
internal override void Notify(CapiApplication application, MessageAsyncResult result) { Connection connection = (Connection)result.Caller; connection.DisconnectConfirmation(this, result); }
/// <summary> /// Local confirmation of the request. /// </summary> /// <param name="header"></param> /// <param name="confirmation"></param> internal abstract void ListenConfirmation(ListenConfirmation confirmation, MessageAsyncResult result);
internal abstract void Notify(CapiApplication application, MessageAsyncResult result);
internal void SendRequestMessage(MessageAsyncResult result) { result.Request.Number = GetUniqueMessageNumber(); _asyncDictionary.AddSafe(result.Request.Number, result); SendMessage(result.Request); }
public IAsyncResult BeginHangUp(AsyncCallback callback, object state) { try { Message request = null; switch (_status) { case ConnectionStatus.Connected: case ConnectionStatus.B_ConnectPending: _inititator = true; request = new DisconnectB3Request(_ncci); break; case ConnectionStatus.D_Connected: case ConnectionStatus.D_ConnectPending: case ConnectionStatus.B_DisconnectPending: _inititator = true; request = new DisconnectRequest(_plci); break; default: throw Error.NotSupported(); } MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _application.SendRequestMessage(result); return result; } catch (Exception e) { Trace.TraceError("Connection#{0}::BeginHangUp, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }
/// <summary> /// Local confirmation of the connect request. /// </summary> /// <param name="header"></param> /// <param name="confirmation"></param> internal abstract void ConnectConfirmation(ConnectConfirmation confirmation, MessageAsyncResult result);
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { IntPtr ptr = IntPtr.Zero; try { if (buffer == null) throw new ArgumentNullException("buffer"); if (offset < 0 || offset > short.MaxValue) throw new ArgumentOutOfRangeException("offset"); // data block cannot be bigger than the value which we used in CAPI_REGISTER call. if (count < 0 || count > _connection.Application.BDataLenght) throw new ArgumentOutOfRangeException("count"); if ((buffer.Length - offset) < count) throw new ArgumentException("Invalid offset"); if (_connection.Status != ConnectionStatus.Connected) throw new NotSupportedException(); Debug.Assert(count <= short.MaxValue); if (count >= short.MaxValue) throw new NotSupportedException(); ptr = Marshal.AllocHGlobal(count); Marshal.Copy(buffer, offset, ptr, count); // build request DataB3Request request = new DataB3Request(); request.Identifier.NCCI = _connection.NCCI; request.Data = ptr; request.DataLength = (short)count; _dataHandle++; request.DataHandle = _dataHandle; MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _connection.Application.SendRequestMessage(result); return result; } catch (Exception e) { Trace.TraceError("Connection#{0}::BeginWriteData, Exception = {1}", ValidationHelper.HashString(this), e); // clean memory if (ptr != IntPtr.Zero) { Marshal.FreeHGlobal(ptr); } throw; } }
public IAsyncResult BeginListen(CIPMask service, AsyncCallback callback, object state) { try { ListenRequest request = new ListenRequest(_id); request.CIPMask = service; MessageAsyncResult result = new MessageAsyncResult(this, request, callback, state); _application.SendRequestMessage(result); return result; } catch (Exception e) { Trace.TraceError("Controller#{0}::BeginListen, Exception = {1}", ValidationHelper.HashString(this), e); throw; } }