/// <summary>
        /// Process the peer messages
        /// </summary>
        private void PeerOnMessageReceivedEvent(IClient sender, MessageEventArgs messageArgs)
        {                        
            var message = messageArgs.Message;

            if (message == null)
                return;
            
            switch (message.TypeOfMessage)
            {               
                case MessageType.Request:
                    switch (((RequestMessage)message).RequestedMessageType)
                    {
                        case MessageType.Ping:
                            _superPeerNode.GetClientInfo().LastPingMesssageDateTime = DateTime.Now;
                            break;
                        case MessageType.CloseConnection:                            
                            _superPeerNode.GetSuperPeerClient().Close();                           
                            break;
                    }
                    break;               

                default:
                    if (_superPeerNode is SuperPeerClient)
                        new ClientMessageManager((SuperPeerClient)_superPeerNode).ClientPeerOnMessageReceivedEvent(sender, messageArgs);
                    else if (_superPeerNode is SuperPeerServer)
                        new ServerMessageManager((SuperPeerServer)_superPeerNode).ServerPeerOnMessageReceivedEvent(sender, messageArgs);
                    break;
            }          
        }
        public void ClientPeerOnMessageReceivedEvent(IClient sender, MessageEventArgs messageArgs)
        {
            var message = messageArgs.Message;

            switch (message.TypeOfMessage)
            {
                case MessageType.ConnectAsClient:
                    InitConnectionAsClient(((PeerAddressMessage)messageArgs.Message).PeerAddress);
                    break;
            }
        }
        public void ServerPeerOnMessageReceivedEvent(IClient sender, MessageEventArgs messageArgs)
        {
            var message = messageArgs.Message;

            switch (message.TypeOfMessage)
            {
                case MessageType.ConnectAsServer:
                    _superPeerServer.GetClientInfo().Client.StopListeningMessages();
                    InitConnectionAsServer(((PeerAddressMessage) messageArgs.Message).PeerAddress);
                    break;
            }
        }