Пример #1
0
        private void UDPCommandListener()
        {
            UdpClient CommandListener = new UdpClient(ClientInfo.EndPoint());
            Message   responseData    = Utilities.Serialize("ERR:Response Not Processed");
            bool      active          = true;

            try
            {
                while (active)
                {
                    Console.WriteLine("UDP Waiting for broadcast");

                    IPEndPoint serverEP = ServerInfo.EndPoint();
                    Message    message  = new Message();
                    message.data = CommandListener.Receive(ref serverEP);
                    Console.WriteLine(ServerInfo);

                    object receivedData = Utilities.Deserialize(message);
                    if (receivedData is string)
                    {
                        switch ((string)receivedData)
                        {
                        case "CMD:Win":
                            this.OnRaiseClientWinEvent();
                            break;

                        case "CMD:Disconnect":
                            Console.WriteLine("Received Command: Disconnect");
                            active = false;
                            this.OnRaiseClientDisconnectedEvent(this.ClientInfo);
                            receivedData = "CMD:Disconnect";
                            responseData = Utilities.Serialize("RESPONSE:Disconnect");
                            break;
                        }
                    }

                    Console.WriteLine($"Received broadcast from {serverEP} :");
                    Console.WriteLine($" RSVP address {receivedData.ToString()}");


                    // Send the server verification that the response was received.
                    Console.WriteLine("UDP Client sending response");
                    CommandListener.Send(responseData.data, responseData.data.Length, serverEP);
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }
            catch (ThreadAbortException e)
            {
                Console.WriteLine("Thread Aborted: {0}", e);
                Console.WriteLine("Disposing of UDP server");
            }
            finally
            {
                CommandListener.Close();
            }
        }
Пример #2
0
        private void SendCommandToClient(HelloPacket targetClient, string command)
        {
            UdpClient client  = new UdpClient();
            Message   request = new Message();

            request = Utilities.Serialize(command);

            IPEndPoint serverEP = new IPEndPoint(IPAddress.Any, 0);

            client.Send(request.data, request.data.Length, targetClient.EndPoint());

            Console.WriteLine($"Command {command} sent to the client: {targetClient.ToString()}");
            Message responseMessage = new Message(256);

            // s.Receive(responseMessage.data);

            responseMessage.data = client.Receive(ref serverEP);
            object responseData = Utilities.Deserialize(responseMessage);

            Console.WriteLine($"Received respone from {responseData.ToString()}");

            client.Close();
        }
Пример #3
0
        /// <summary>
        /// This will be the way that clients are added to the current group.
        /// Games can be hosted as open or closed. (closed will keep new players from joining)
        /// Closed will be the default.
        ///
        /// Returns a reference to the Listener
        /// </summary>
        private void ClientDiscover()
        {
            // UDP listener logic
            Console.WriteLine($"Creating UDP server listener {HostInformation.ToString()}");

            Message responseData = Utilities.Serialize(HostInformation);

            try
            {
                // Stop listening when the game starts (in closed mode).
                while (!ClosedGame)
                {
                    Console.WriteLine("UDP Waiting for broadcast");

                    IPEndPoint clientEP = new IPEndPoint(IPAddress.Any, 0);
                    Message    message  = new Message();
                    message.data = server.Receive(ref clientEP);
                    if (!ClosedGame)
                    {
                        object receivedData = Utilities.Deserialize(message);
                        if (receivedData is HelloPacket)
                        {
                            // Add new client to Lists
                            HelloPacket newClient = receivedData as HelloPacket;
                            this.OnRaiseClientJoinedEvent(newClient);
                        }
                        if (receivedData is string)
                        {
                            switch (receivedData as string)
                            {
                            case "RESPONSE:Disconnect":
                                OnRaiseClientDisconnectedEvent(HostList.Find(HelloPacket => HelloPacket.EndPoint() == clientEP));
                                break;
                            }
                        }

                        Console.WriteLine($"Received broadcast from {clientEP} :");
                        Console.WriteLine($" RSVP address {receivedData.ToString()}");



                        // Add the client EndPoint to the ClientList
                        Console.WriteLine($"{clientEP} added to the clientlist");
                        ClientList.Add(clientEP);


                        // Send the server data to the client
                        Console.WriteLine("UDP Server sending response");
                        server.Send(responseData.data, responseData.data.Length, clientEP);
                    }
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }
            catch (ThreadAbortException e)
            {
                Console.WriteLine("Thread Aborted: {0}", e);
                Console.WriteLine("Disposing of UDP server");
            }
            finally
            {
                server.Close();
            }
        }