Esempio n. 1
0
        public async Task <ServerInfoMessage> RetrieveServerInfo()
        {
            client.SendMessage(new ServerInfoRequestMessage());
            string message = await client.AwaitMessageAsync();

            return(decoder.DecodeMessage <ServerInfoMessage>(message));
        }
Esempio n. 2
0
        /// <summary>
        /// Starts waiting for message, returns void when client disconnects or connection has to be closed
        /// </summary>
        /// <param name="clientData"></param>
        private void WaitForMessage(Client clientData)
        {
            bool open = true;

            while (open)
            {
                // Close connection if the client disconnected
                if (!clientData.client.Connected)
                {
                    return;
                }

                // Wait untill message data is available
                while (!clientData.client.GetStream().DataAvailable)
                {
                    // Check if client is still connected
                    if (clientData.client.Client.Poll(1000, SelectMode.SelectRead))
                    {
                        // Remove the client and end WaitForMessage
                        RemoveClient(clientData.id);
                        clientData.ExecDisconnectCallback();
                        return;
                    }

                    // Put thread in low priority pool if no data is available
                    Thread.Sleep(1);
                }

                ReceivedMessage incomingMessage = MessageDecoder.DecodeMessage(ReadStream(clientData));

                if (incomingMessage.close)
                {
                    RemoveClient(clientData.id);
                    break;
                }

                clientData.ExecMessageCallback(incomingMessage.content);

                // byte[] resp = Message.GenerateMessage("                     Hello World                     Hello World                          Hello World                     Hello World                   a");
                // byte[] resp = Message.GenerateMessage("yes my dude");

                // stream.Write(resp, 0, resp.Length);

                // This is just here for testing connection closing
                // messageAmount++;
                // open = messageAmount < 50;
            }
        }