public async Task <ServerInfoMessage> RetrieveServerInfo() { client.SendMessage(new ServerInfoRequestMessage()); string message = await client.AwaitMessageAsync(); return(decoder.DecodeMessage <ServerInfoMessage>(message)); }
/// <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; } }