Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public GameHubClient()
 {
     MessageQueue = new GameHubMessageQueue();
     MessageQueue.MessagesAdded += HandleMessagesAdded;
     ClientId = Guid.NewGuid();
 }