public void HandleIncommingMessage(NetMessage message)
        {
            try{
                switch (message.Action.Action)
                {
                case NetAction.ActionType.ACCEPTED:
                    PendingAcceptRequestsManager.MessageReceived(message.Action.AcceptedMessage.ActionId);
                    break;

                case NetAction.ActionType.FAULT:
                    HandleFault(message);
                    break;

                case NetAction.ActionType.NOTIFICATION:
                    HandleNotification(message);
                    break;

                case NetAction.ActionType.PONG:
                    HandlePongMessage(message);
                    break;

                default:
                    DealWithException(new Exception(String.Format("Unexpected incoming message type: {0}", message.Action.Action)));
                    break;
                }
            } catch (Exception ex) {
                DealWithException(new Exception("Error handling incomming message.", ex));
            }
        }
        public bool HandleOutgoingMessage(NetMessage message, AcceptRequest acceptRequest)
        {
            if (acceptRequest != null)
            {
                PendingAcceptRequestsManager.AddAcceptRequest(acceptRequest);
            }

            // transform and Marshall message
            byte[] encodedData = EncodeMessage(message);

            return(SendMessage(encodedData));
        }
        private void HandleFault(NetMessage message)
        {
            string msgDest = message.Action.FaultMessage.Detail;

            if (message.Action.FaultMessage.Code.Equals(NetFault.PollTimeoutErrorMessage.Action.FaultMessage.Code) ||
                message.Action.FaultMessage.Code.Equals(NetFault.NoMessageInQueueErrorMessage.Action.FaultMessage.Code))
            {
                lock (this.syncSubscriptions)
                {
                    if (syncSubscriptions.ContainsKey(msgDest))
                    {
                        PollRequest request = syncSubscriptions[msgDest];
                        if (message.Action.FaultMessage.Code.Equals(NetFault.PollTimeoutErrorMessage.Action.FaultMessage.Code))
                        {
                            request.Handover.Offer(UnblockNotification);
                        }
                        else
                        {
                            request.Handover.Offer(NoMessageNotification);
                        }
                    }
                    return;
                }
            }

            message.Action.FaultMessage.Headers = message.Headers;

            if (!PendingAcceptRequestsManager.MessageFailed(message.Action.FaultMessage))
            {
                FaultHandler handler = OnFault;
                if (handler != null)
                {
                    OnFault(message.Action.FaultMessage);
                }
            }
        }