Exemplo n.º 1
0
        private static void UdpListener()
        {
            try
            {
                _server = new UdpClient(60069); //60069
                _server.EnableBroadcast = true;
            }
            catch (Exception ex)
            {
                ExceptionHandler.Handle(ex);
            }

            while (true)
            {
                try
                {
                    if (_server == null)
                    {
                        return;
                    }

                    //Vänta på broadcast från klient
                    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 60069);

                    //Ta emot msg från klienten
                    byte[] data           = _server.Receive(ref ipep);
                    string receiveMessage = Encoding.ASCII.GetString(data, 0, data.Length);

                    SimhoppMessage msg = SimhoppMessage.Deserialize(receiveMessage);
                    SimhoppMessage response;

                    switch (msg.Action)
                    {
                    case SimhoppMessage.ClientAction.Ping:
                        response = SendContestStatus();
                        break;

                    case SimhoppMessage.ClientAction.Login:
                        if (_presenter.NewConnections)
                        {
                            response = AssignIdToJudge(msg, ipep);
                        }
                        else
                        {
                            response = new SimhoppMessage(-2, SimhoppMessage.ClientAction.NotAccepted);
                        }
                        break;

                    case SimhoppMessage.ClientAction.SubmitScore:
                        SubmitScore(msg);
                        response = new SimhoppMessage(-2, SimhoppMessage.ClientAction.Confirm);
                        break;

                    case SimhoppMessage.ClientAction.Logout:
                        LogoutClient(msg);
                        response = new SimhoppMessage(-2, SimhoppMessage.ClientAction.Confirm);
                        break;

                    default:
                        response = SimhoppMessage.ErrorMessage("Not implemented");
                        break;
                    }

                    //Svara
                    var responseData = Encoding.ASCII.GetBytes(response.Serialize());
                    _server.Send(responseData, responseData.Length, ipep);
                }
                catch (Exception ex)
                {
                    ExceptionHandler.Handle(ex);
                }
            }
        }