Ejemplo n.º 1
0
        private void RemoveCoordinatorRecieved(MatchCoordinator coordinator)
        {
            var newCoordinators = State.Coordinators.ToList();

            newCoordinators.RemoveAll(x => x.Id == coordinator.Id);
            State.Coordinators = newCoordinators.ToArray();
            NotifyPropertyChanged(nameof(State));
        }
Ejemplo n.º 2
0
        public void RemoveCoordinator(MatchCoordinator coordinator)
        {
            var @event = new Event();

            @event.Type          = Event.EventType.CoordinatorLeft;
            @event.ChangedObject = coordinator;
            Send(new Packet(@event));
        }
Ejemplo n.º 3
0
        private void AddCoordinatorRecieved(MatchCoordinator coordinator)
        {
            var newCoordinators = State.Coordinators.ToList();

            newCoordinators.Add(coordinator);
            State.Coordinators = newCoordinators.ToArray();
            NotifyPropertyChanged(nameof(State));
        }
Ejemplo n.º 4
0
        public void RemoveCoordinator(MatchCoordinator coordinator)
        {
            lock (State)
            {
                var newCoordinators = State.Coordinators.ToList();
                newCoordinators.RemoveAll(x => x.Id == coordinator.Id);
                State.Coordinators = newCoordinators.ToArray();
            }

            NotifyPropertyChanged(nameof(State));

            var @event = new Event();

            @event.Type          = Event.EventType.CoordinatorLeft;
            @event.ChangedObject = coordinator;
            BroadcastToAllClients(new Packet(@event));
        }
Ejemplo n.º 5
0
        public void AddCoordinator(MatchCoordinator coordinator)
        {
            lock (State)
            {
                var newCoordinators = State.Coordinators.ToList();
                newCoordinators.Add(coordinator);
                State.Coordinators = newCoordinators.ToArray();
            }

            NotifyPropertyChanged(nameof(State));

            var @event = new Event();

            @event.Type          = Event.EventType.CoordinatorAdded;
            @event.ChangedObject = coordinator;
            BroadcastToAllClients(new Packet(@event));
        }
Ejemplo n.º 6
0
        private void Server_PacketRecieved(ConnectedClient player, Packet packet)
        {
            #region LOGGING
            string secondaryInfo = string.Empty;
            if (packet.Type == PacketType.PlaySong)
            {
                secondaryInfo = (packet.SpecificPacket as PlaySong).Beatmap.LevelId + " : " + (packet.SpecificPacket as PlaySong).Beatmap.Difficulty;
            }
            else if (packet.Type == PacketType.LoadSong)
            {
                secondaryInfo = (packet.SpecificPacket as LoadSong).LevelId;
            }
            else if (packet.Type == PacketType.Command)
            {
                secondaryInfo = (packet.SpecificPacket as Command).CommandType.ToString();
            }
            else if (packet.Type == PacketType.Event)
            {
                secondaryInfo = (packet.SpecificPacket as Event).Type.ToString();
                if ((packet.SpecificPacket as Event).Type == Event.EventType.PlayerUpdated)
                {
                    secondaryInfo = $"{secondaryInfo} from ({((packet.SpecificPacket as Event).ChangedObject as Player).Name} : {((packet.SpecificPacket as Event).ChangedObject as Player).DownloadState}) : ({((packet.SpecificPacket as Event).ChangedObject as Player).PlayState} : {((packet.SpecificPacket as Event).ChangedObject as Player).Score} : {((packet.SpecificPacket as Event).ChangedObject as Player).StreamDelayMs})";
                }
                else if ((packet.SpecificPacket as Event).Type == Event.EventType.MatchUpdated)
                {
                    secondaryInfo = $"{secondaryInfo} ({((packet.SpecificPacket as Event).ChangedObject as Match).SelectedDifficulty})";
                }
            }
            else if (packet.Type == PacketType.ForwardingPacket)
            {
                secondaryInfo = $"{(packet.SpecificPacket as ForwardingPacket).SpecificPacket.GetType()}";
            }
            Logger.Debug($"Recieved {packet.ToBytes().Length} bytes: ({packet.Type}) ({secondaryInfo})");
            #endregion LOGGING

            SendToOverlay(packet);

            //Ready to go, only disabled since it is currently unusued

            /*if (packet.Type != PacketType.Acknowledgement)
             * {
             *  Send(packet.From, new Packet(new Acknowledgement()
             *  {
             *      PacketId = packet.Id
             *  }));
             * }*/

            if (packet.Type == PacketType.Acknowledgement)
            {
                Acknowledgement acknowledgement = packet.SpecificPacket as Acknowledgement;
                AckReceived?.Invoke(acknowledgement, packet.From);
            }
            else if (packet.Type == PacketType.SongList)
            {
                SongList songList = packet.SpecificPacket as SongList;
            }
            else if (packet.Type == PacketType.LoadedSong)
            {
                LoadedSong loadedSong = packet.SpecificPacket as LoadedSong;
            }
            else if (packet.Type == PacketType.Connect)
            {
                Connect connect = packet.SpecificPacket as Connect;

                if (connect.ClientVersion != SharedConstructs.VersionCode)
                {
                    Send(player.id, new Packet(new ConnectResponse()
                    {
                        Type          = ConnectResponse.ResponseType.Fail,
                        Self          = null,
                        State         = null,
                        Message       = $"Version mismatch, this server is on version {SharedConstructs.Version}",
                        ServerVersion = SharedConstructs.VersionCode
                    }));
                }
                else if (connect.ClientType == Connect.ConnectTypes.Player)
                {
                    var newPlayer = new Player()
                    {
                        Id     = player.id,
                        Name   = connect.Name,
                        UserId = connect.UserId,
                        Team   = new Team()
                        {
                            Id = Guid.Empty, Name = "None"
                        }
                    };

                    AddPlayer(newPlayer);

                    //Give the newly connected player their Self and State
                    Send(player.id, new Packet(new ConnectResponse()
                    {
                        Type          = ConnectResponse.ResponseType.Success,
                        Self          = newPlayer,
                        State         = State,
                        Message       = $"Connected to {serverName}!",
                        ServerVersion = SharedConstructs.VersionCode
                    }));
                }
                else if (connect.ClientType == Connect.ConnectTypes.Coordinator)
                {
                    var coordinator = new MatchCoordinator()
                    {
                        Id   = player.id,
                        Name = connect.Name
                    };
                    AddCoordinator(coordinator);

                    //Give the newly connected coordinator their Self and State
                    Send(player.id, new Packet(new ConnectResponse()
                    {
                        Type          = ConnectResponse.ResponseType.Success,
                        Self          = coordinator,
                        State         = State,
                        Message       = $"Connected to {serverName}!",
                        ServerVersion = SharedConstructs.VersionCode
                    }));
                }
            }
            else if (packet.Type == PacketType.Event)
            {
                Event @event = packet.SpecificPacket as Event;
                switch (@event.Type)
                {
                case Event.EventType.CoordinatorAdded:
                    AddCoordinator(@event.ChangedObject as MatchCoordinator);
                    break;

                case Event.EventType.CoordinatorLeft:
                    RemoveCoordinator(@event.ChangedObject as MatchCoordinator);
                    break;

                case Event.EventType.MatchCreated:
                    CreateMatch(@event.ChangedObject as Match);
                    break;

                case Event.EventType.MatchUpdated:
                    UpdateMatch(@event.ChangedObject as Match);
                    break;

                case Event.EventType.MatchDeleted:
                    DeleteMatch(@event.ChangedObject as Match);
                    break;

                case Event.EventType.PlayerAdded:
                    AddPlayer(@event.ChangedObject as Player);
                    break;

                case Event.EventType.PlayerUpdated:
                    UpdatePlayer(@event.ChangedObject as Player);
                    break;

                case Event.EventType.PlayerLeft:
                    RemovePlayer(@event.ChangedObject as Player);
                    break;

                default:
                    Logger.Error($"Unknown command recieved from {player.id}!");
                    break;
                }
            }
            else if (packet.Type == PacketType.SongFinished)
            {
                BroadcastToAllClients(packet);
                PlayerFinishedSong?.Invoke(packet.SpecificPacket as SongFinished);
            }
            else if (packet.Type == PacketType.ForwardingPacket)
            {
                var forwardingPacket = packet.SpecificPacket as ForwardingPacket;
                var forwardedPacket  = new Packet(forwardingPacket.SpecificPacket);
                ForwardTo(forwardingPacket.ForwardTo, packet.From, forwardedPacket);
            }
        }