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 Subscribe( TcpClient client, GameHubMessageQueue MessageQueue, TimeSpan pollInterval, CancellationToken token, TaskCreationOptions taskCreationOptions = TaskCreationOptions.None) { Task.Factory.StartNew( () => { while (true) { try { if (client != null && client.Connected && client.GetStream().DataAvailable) { ReadMessagesFromConnection(client, MessageQueue); } if (token.WaitHandle.WaitOne(pollInterval)) { break; } } catch { client.Close(); } } }, token, taskCreationOptions, TaskScheduler.Default); }
public GameHubClient() { MessageQueue = new GameHubMessageQueue(); MessageQueue.MessagesAdded += HandleMessagesAdded; ClientId = Guid.NewGuid(); }