Exemplo n.º 1
0
        private static SimhoppMessage AssignIdToJudge(SimhoppMessage msg, IPEndPoint ipep)
        {
            int index = 0;

            foreach (Judge judge in _presenter.Judges)
            {
                if (judge.Name == msg.Data)
                {
                    Guid guid = Guid.NewGuid();
                    _judges[index] = judge;

                    _judgeClients.Add(ipep, index);

                    SimhoppMessage.SimhoppStatus status = new SimhoppMessage.SimhoppStatus(0, 0, _presenter.CurrentEvent);
                    SimhoppMessage response             = new SimhoppMessage(-2, SimhoppMessage.ClientAction.AssignId, guid.ToString(), judge.Index(_presenter.Judges), status);
                    _presenter.AssignJudgeAsClient(index);
                    return(response);
                }
                index++;
            }
            return(SimhoppMessage.ErrorMessage("Judge not found"));
        }
Exemplo n.º 2
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);
                }
            }
        }