コード例 #1
0
        private void ListenForMessages(Action <string> showMessageAction, Action <string> showErrorDialogAction)
        {
            string message        = "";
            string decodedMessage = "";

            byte[] buffer = new byte[bufferSize];

            while (networkStream.CanRead)
            {
                try
                {
                    while (!decodedMessage.EndsWith("»"))
                    {
                        int readBytes = networkStream.Read(buffer, 0, bufferSize);
                        message       += Encoding.ASCII.GetString(buffer, 0, readBytes);
                        decodedMessage = Parser.DecodeProtocolMessage(message);
                    }

                    MatchCollection       matchCollection       = Parser.ProtocolToMatchesArray(decodedMessage);
                    ProtocolMessageObject protocolMessageObject = new ProtocolMessageObject(matchCollection);
                    string messageToShow = Parser.FormatMessage(protocolMessageObject);
                    showMessageAction(messageToShow);
                    message        = "";
                    decodedMessage = "";
                }
                catch (IOException ioException)
                {
                    showMessageAction("Disconnected");
                    showErrorDialogAction("Connection to the server lost!");
                    networkStream.Close();
                }
            }

            networkStream.Close();
        }
コード例 #2
0
        private void ListenForUserConnectMessage(TcpClient client, int bufferSize, Action <string> showMessageAction)
        {
            string message        = "";
            string decodedMessage = "";

            byte[]        buffer        = new byte[bufferSize];
            NetworkStream networkStream = client.GetStream();
            bool          connected     = false;

            while (!connected)
            {
                while (!decodedMessage.EndsWith("»"))
                {
                    int readBytes = networkStream.Read(buffer, 0, bufferSize);
                    message       += Encoding.ASCII.GetString(buffer, 0, readBytes);
                    decodedMessage = Parser.DecodeProtocolMessage(message);
                }

                MatchCollection       matchCollection       = Parser.ProtocolToMatchesArray(decodedMessage);
                ProtocolMessageObject protocolMessageObject = new ProtocolMessageObject(matchCollection);
                if (protocolMessageObject.protocolType == "CONNECT")
                {
                    message        = "";
                    decodedMessage = "";
                    ChatClient chatClient = new ChatClient(networkStream, protocolMessageObject.username);
                    connectedChatClients.Add(protocolMessageObject.username, chatClient);
                    showMessageAction(Parser.FormatMessage(protocolMessageObject));
                    Task.Run(() => ListenForMessages(chatClient, showMessageAction));
                    BroadcastMessages(protocolMessageObject, bufferSize, showMessageAction);
                    connected = true;
                }
            }
        }
コード例 #3
0
        private void ListenForMessages(ChatClient chatClient, Action <string> showMessageAction)
        {
            int    bufferSize     = 2;
            string message        = "";
            string decodedMessage = "";

            byte[]        buffer        = new byte[bufferSize];
            NetworkStream networkStream = chatClient.networkStream;

            while (networkStream.CanRead)
            {
                while (!decodedMessage.EndsWith("»"))
                {
                    int readBytes = networkStream.Read(buffer, 0, bufferSize);
                    message       += Encoding.ASCII.GetString(buffer, 0, readBytes);
                    decodedMessage = Parser.DecodeProtocolMessage(message);
                }


                MatchCollection       matchCollection       = Parser.ProtocolToMatchesArray(decodedMessage);
                ProtocolMessageObject protocolMessageObject = new ProtocolMessageObject(matchCollection);
                BroadcastMessages(protocolMessageObject, bufferSize, showMessageAction);
                string messageToShow = Parser.FormatMessage(protocolMessageObject);
                showMessageAction(messageToShow);
                message        = "";
                decodedMessage = "";
            }

            networkStream.Close();
        }
コード例 #4
0
 public void BroadcastMessages(ProtocolMessageObject protocolMessage, int bufferSize, Action <string> showMessageAction)
 {
     foreach (KeyValuePair <string, ChatClient> entry in connectedChatClients)
     {
         if (entry.Key != protocolMessage.username)
         {
             SendMessage(
                 protocolMessage.protocolType,
                 protocolMessage.username,
                 protocolMessage.message,
                 bufferSize,
                 entry.Value.networkStream,
                 showMessageAction
                 );
         }
     }
 }