public async Task UpdatePlayer(Player player)
        {
            lock (State)
            {
                var playerToReplace = State.Players.FirstOrDefault(x => x.User.UserEquals(player.User));
                State.Players.Remove(playerToReplace);
                State.Players.Add(player);
            }

            var @event = new Event
            {
                player_updated_event = new Event.PlayerUpdatedEvent
                {
                    Player = player
                }
            };

            await Broadcast(new Packet
            {
                Event = @event
            });

            if (PlayerInfoUpdated != null)
            {
                await PlayerInfoUpdated.Invoke(player);
            }
        }
예제 #2
0
        public void UpdatePlayerReceived(Player player)
        {
            // TODO: This is garbage
            var newPlayers = State.Players.ToList();

            newPlayers[newPlayers.FindIndex(x => x.Id == player.Id)] = player;
            State.Players.Clear();
            State.Players.AddRange(newPlayers);
            NotifyPropertyChanged(nameof(State));

            //If the player updated is *us* (an example of this coming from the outside is stream sync info)
            //we should update our Self

            // TODO: This shouldn't be a new User call
            if (Self.Id == player.Id)
            {
                SelfObject = player;
                Self       = new User
                {
                    Id   = player.Id,
                    Name = player.Name
                };
            }

            PlayerInfoUpdated?.Invoke(player);
        }
예제 #3
0
        public void UpdatePlayerReceived(Player player)
        {
            var newPlayers = State.Players.ToList();

            newPlayers[newPlayers.FindIndex(x => x.Id == player.Id)] = player;
            State.Players = newPlayers.ToArray();
            NotifyPropertyChanged(nameof(State));

            //If the player updated is *us* (an example of this coming from the outside is stream sync info)
            //we should update our Self
            if (Self.Id == player.Id)
            {
                Self = player;
            }

            PlayerInfoUpdated?.Invoke(player);
        }
예제 #4
0
        public void HandleHandicap(NetworkMessage msg)
        {
            MsgHandicap update = msg as MsgHandicap;

            foreach (var u in update.Handicaps)
            {
                Player p = GetPlayerByID(u.Key);
                if (p != null)
                {
                    p.Handicap = u.Value;
                    if (PlayerInfoUpdated != null)
                    {
                        PlayerInfoUpdated.Invoke(this, p);
                    }
                }
            }
        }
예제 #5
0
        public void HandlePlayerInfo(NetworkMessage msg)
        {
            MsgPlayerInfo info = msg as MsgPlayerInfo;

            foreach (var p in info.PlayerUpdates)
            {
                Player player = GetPlayerByID(p.PlayerID);
                if (player != null)
                {
                    player.Attributes = p.Attributes;

                    if (PlayerInfoUpdated != null)
                    {
                        PlayerInfoUpdated.Invoke(this, player);
                    }
                }
            }
        }
예제 #6
0
        public void HandleScoreUpdate(NetworkMessage msg)
        {
            MsgScore sc     = msg as MsgScore;
            Player   player = GetPlayerByID(sc.PlayerID);

            if (player == null)
            {
                return;
            }

            player.Wins      = sc.Wins;
            player.Losses    = sc.Losses;
            player.TeamKills = sc.TeamKills;

            if (PlayerInfoUpdated != null)
            {
                PlayerInfoUpdated.Invoke(this, player);
            }
        }
예제 #7
0
        public void UpdatePlayer(Player player)
        {
            lock (State)
            {
                var newPlayers = State.Players.ToList();
                newPlayers[newPlayers.FindIndex(x => x.Id == player.Id)] = player;
                State.Players = newPlayers.ToArray();
            }

            NotifyPropertyChanged(nameof(State));

            var @event = new Event();

            @event.Type          = Event.EventType.PlayerUpdated;
            @event.ChangedObject = player;
            BroadcastToAllClients(new Packet(@event));

            PlayerInfoUpdated?.Invoke(player);
        }
예제 #8
0
        private async Task ReadAsync()
        {
            await Task.Run(() =>
            {
                using (var fileStream = new FileStream(_currentJournalFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    using (StreamReader file = new StreamReader(fileStream))
                        using (JsonTextReader reader = new JsonTextReader(file))
                        {
                            reader.SupportMultipleContent = true;

                            var jsonSerializer       = new JsonSerializer();
                            DateTime newestEventTime = _latestEventTime;
                            dynamic logEvent         = null;
                            while (reader.Read())
                            {
                                logEvent = jsonSerializer.Deserialize(reader);

                                if (logEvent != null && (_latestEventTime == null || logEvent.timestamp > _latestEventTime))
                                {
                                    HandleLogEvent(logEvent);
                                }
                            }
                            if (logEvent != null)
                            {
                                _latestEventTime = logEvent.timestamp;
                            }
                        }
                // Fire events for new information
                if (_isPlayerInfoChanged)
                {
                    PlayerInfoUpdated?.Invoke(this, Log);
                    _isPlayerInfoChanged = false;
                }
                if (_isLocationChanged)
                {
                    LocationUpdated?.Invoke(this, Log);
                    _isLocationChanged = false;
                }
            });
        }
예제 #9
0
 /// <summary>
 /// Updates player info and raises the appropiate events.
 /// </summary>
 public void UpdatePlayerInfo(ActivePlayer updatedPlayerInfo)
 {
     PlayerInfo = updatedPlayerInfo;
     PlayerInfoUpdated?.Invoke(updatedPlayerInfo);
 }
예제 #10
0
 private void reader_PlayerInfoUpdated(object sender, EDLog e)
 {
     PlayerInfoUpdated?.Invoke(this, e.Player);
 }