Example #1
0
        /// <summary>
        ///
        /// </summary>
        private void Run()
        {
            try
            {
                while (true)
                {
                    try
                    {
                        //receive data size for the response
                        if (_connection != null)
                        {
                            _connection.Receive(_sizeBuffer, DATA_SIZE_BUFFER_LENGTH);

                            int rspLength = Convert.ToInt32(UTF8Encoding.UTF8.GetString(_sizeBuffer, 0, _sizeBuffer.Length));

                            if (rspLength > 0)
                            {
                                byte[] dataBuffer = new byte[rspLength];
                                _connection.Receive(dataBuffer, rspLength);

                                //deserialize the message
                                IResponse response = null;
                                if (_formatter != null)
                                {
                                    response = _formatter.Deserialize(dataBuffer) as IResponse;
                                }

                                if (_eventListener != null)
                                {
                                    _eventListener.ReceiveResponse(response);
                                }
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                    catch (ThreadAbortException) { break; }
                    catch (ThreadInterruptedException) { break; }
                    catch (ConnectionException ce)
                    {
                        if (_traceProvider != null)
                        {
                            _traceProvider.TraceError(Name + ".Run", ce.ToString());
                        }
                        if (_eventListener != null)
                        {
                            _eventListener.ChannelDisconnected(_serverIP, ce.Message);
                        }
                        break;
                    }
                    catch (Exception e)
                    {
                        if (_traceProvider != null)
                        {
                            _traceProvider.TraceError(Name + ".Run", e.ToString());
                        }
                        object error = null;

                        if (_formatter != null)
                        {
                            error = _formatter.GetErrorResponse(e);
                        }

                        if (_eventListener != null)
                        {
                            _eventListener.ChannelError(error);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
            }
            catch (ThreadInterruptedException e)
            {
            }
        }