Пример #1
0
        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;
            }
        }
Пример #2
0
        internal override void Notify(CapiApplication application, MessageAsyncResult result)
        {
            Controller controller = application.GetControllerByID(Identifier.ControllerID);
            Connection connection = controller.GetConnectionByPLCI(Identifier.PLCI);

            connection.DataB3Confirmation(this, result);
        }
Пример #3
0
        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);
            }
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
 internal void ListenConfirmation(ListenConfirmation confirmation, MessageAsyncResult result)
 {
     if (confirmation.Succeeded)
     {
         result.InvokeCallback();
     }
     else
     {
         result.InvokeCallback(new CapiException(confirmation.Info));
     }
 }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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));
            }
        }
Пример #9
0
 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));
     }
 }
Пример #10
0
 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;
     }
 }
Пример #11
0
 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));
     }
 }
Пример #12
0
        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));
                }
            }
        }
Пример #13
0
 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));
     }
 }
Пример #14
0
 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;
     }
 }
Пример #15
0
        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;
            }
        }
Пример #16
0
 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;
     }
 }
Пример #17
0
 internal abstract void DisconnectB3Confirmation(DisconnectB3Confirmation confirmation, MessageAsyncResult result);
Пример #18
0
        internal override void Notify(CapiApplication application, MessageAsyncResult result)
        {
            Controller c = (Controller)result.Caller;

            c.AlertConfirmation(this, result);
        }
Пример #19
0
        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;
            }
        }
Пример #20
0
 internal abstract void DataB3Confirmation(DataB3Confirmation confirmation, MessageAsyncResult result);
Пример #21
0
 internal abstract void FacilityConfirmation(FacilityConfirmation confirmation, MessageAsyncResult result);
Пример #22
0
 internal abstract void DataB3Confirmation(DataB3Confirmation confirmation, MessageAsyncResult result);
Пример #23
0
 internal abstract void FacilityConfirmation(FacilityConfirmation confirmation, MessageAsyncResult result);
Пример #24
0
        internal override void Notify(CapiApplication application, MessageAsyncResult result)
        {
            Connection connection = (Connection)result.Caller;

            connection.DisconnectConfirmation(this, result);
        }
Пример #25
0
 /// <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);
Пример #27
0
 internal void SendRequestMessage(MessageAsyncResult result) {
     result.Request.Number = GetUniqueMessageNumber();
     _asyncDictionary.AddSafe(result.Request.Number, result);
     SendMessage(result.Request);
 }
Пример #28
0
 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;
     }
 }
Пример #29
0
 /// <summary>
 /// Local confirmation of the connect request.
 /// </summary>
 /// <param name="header"></param>
 /// <param name="confirmation"></param>
 internal abstract void ConnectConfirmation(ConnectConfirmation confirmation, MessageAsyncResult result);
Пример #30
0
        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;
            }
        }
Пример #31
0
 /// <summary>
 /// Local confirmation of the request.
 /// </summary>
 /// <param name="header"></param>
 /// <param name="confirmation"></param>
 internal abstract void ListenConfirmation(ListenConfirmation confirmation, MessageAsyncResult result);
Пример #32
0
        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));
            }
        }
Пример #33
0
 internal abstract void DisconnectB3Confirmation(DisconnectB3Confirmation confirmation, MessageAsyncResult result);
Пример #34
0
        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));
            }
        }
Пример #35
0
 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));
     }
 }
Пример #36
0
        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));
                }
            }
        }
Пример #37
0
 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;
     }
 }
Пример #38
0
 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);
     }
 }
Пример #39
0
 internal void ListenConfirmation(ListenConfirmation confirmation, MessageAsyncResult result) {
     if (confirmation.Succeeded) {
         result.InvokeCallback();
     } else {
         result.InvokeCallback(new CapiException(confirmation.Info));
     }
 }
Пример #40
0
 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));
     }
 }
Пример #41
0
 internal void SendRequestMessage(MessageAsyncResult result)
 {
     result.Request.Number = GetUniqueMessageNumber();
     _asyncDictionary.AddSafe(result.Request.Number, result);
     SendMessage(result.Request);
 }
Пример #42
0
 /// <summary>
 /// Local confirmation of the connect request.
 /// </summary>
 /// <param name="header"></param>
 /// <param name="confirmation"></param>
 internal abstract void ConnectConfirmation(ConnectConfirmation confirmation, MessageAsyncResult result);