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(); }
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; } } }
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(); }
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 ); } } }