public static void ReadMessagesFromConnection(TcpClient client, GameHubMessageQueue queue) { var messages = new List <IGameHubMessage>(); var stream = client.GetStream(); var jsonBytes = new byte[client.ReceiveBufferSize]; stream.Read(jsonBytes, 0, jsonBytes.Length); var jsonMessage = GameHubMessage.GetStrings(jsonBytes); try { jsonMessage.ToList().ForEach(message => { messages.Add(JsonConvert.DeserializeObject <GameHubMessage>(message)); }); } catch (JsonSerializationException) { // Something was probably wrong with the message } catch (Exception) { Console.WriteLine("Error in decoding message"); } queue.AddRange(messages); queue.QueueChanged(); }
public static void SendMessageToClient(TcpClient client, GameHubMessage message) { var jsonBytes = GameHubMessage.GetBytes(message); var stream = client.GetStream(); if (stream.CanWrite) { stream.Write(jsonBytes, 0, jsonBytes.Length); stream.Flush(); } }
public void NotifyClient(GameHubConnectionClient client, GameHubMessage message) { try { if (client.Connection.Connected) { GameHubConnectivity.SendMessageToClient(client, message); } } catch { return; } }
private void HandleClientConnect(CancellationToken token) { Task.Factory.StartNew(async() => { try { if (Server.Pending()) { var client = await Server.AcceptTcpClientAsync(); var gameHubClient = new GameHubConnectionClient { Connection = client }; lock (_clientsLock) { _clients.Add(gameHubClient); } GameHubConnectivity.Subscribe(client, MessageQueue, TimeSpan.FromMilliseconds(200), token); var message = new GameHubMessage { SenderGamePort = ((IPEndPoint)Server.LocalEndpoint).Port, Text = "Welcome to the GameHub Server. I hope you enjoy yourself", Status = EMessageType.InitialServerConnection }; NotifyClient(gameHubClient, message); } } catch { return; } }, token); }
public void NotifyClients(GameHubMessage message) { Parallel.ForEach(_clients, (GameHubConnectionClient client) => { NotifyClient(client, message); }); }
public static void SendMessageToClient(GameHubConnectionClient client, GameHubMessage message) { SendMessageToClient(client.Connection, message); }