コード例 #1
0
ファイル: FriendManager.cs プロジェクト: Lion1616/ProjectP
        public Friend AddOrUpdate(ulong friendId, Player plr, FriendState playerState, FriendState friendState)
        {
            using (var db = GameDatabase.Open())
            {
                if (_friends.TryGetValue(friendId, out var friend))
                {
                    var dbFriend = DbUtil.Find <PlayerFriendDto>(db, statement => statement
                                                                 .Where(
                                                                     $"{nameof(PlayerFriendDto.PlayerId):C} = @PlayerId AND {nameof(PlayerFriendDto.FriendId):C} = @FriendId")
                                                                 .WithParameters(new { PlayerId = Player.Account.Id, FriendId = friendId })).FirstOrDefault();

                    if (dbFriend == null)
                    {
                        dbFriend = DbUtil.Find <PlayerFriendDto>(db, statement => statement
                                                                 .Where(
                                                                     $"{nameof(PlayerFriendDto.PlayerId):C} = @PlayerId AND {nameof(PlayerFriendDto.FriendId):C} = @FriendId")
                                                                 .WithParameters(new { PlayerId = friendId, FriendId = Player.Account.Id })).FirstOrDefault();
                    }

                    if (dbFriend == null)
                    {
                        throw new Exception("db and server are de-synced!");
                    }

                    dbFriend.PlayerState = (int)playerState;
                    dbFriend.FriendState = (int)friendState;
                    DbUtil.Update(db, dbFriend);
                    friend.PlayerState = playerState;
                    friend.FriendState = friendState;
                    return(friend);
                }

                var newDbFriend = new PlayerFriendDto()
                {
                    PlayerId    = (int)Player.Account.Id,
                    FriendId    = (int)friendId,
                    PlayerState = (int)playerState,
                    FriendState = (int)friendState
                };

                DbUtil.Insert(db, newDbFriend);

                var newFriend = new Friend(Player.Account.Id, friendId, playerState, friendState);
                if (!_friends.TryAdd(newFriend.FriendId, newFriend))
                {
                    throw new ArgumentException("Player is already added", nameof(Player.Account.Id));
                }

                if (plr != null)
                {
                    var newPlrFriend = new Friend(friendId, Player.Account.Id, friendState, playerState);
                    if (!plr.FriendManager._friends.TryAdd(Player.Account.Id, newPlrFriend))
                    {
                        throw new ArgumentException("Player is already added", nameof(newFriend.FriendId));
                    }
                }

                return(newFriend);
            }
        }
コード例 #2
0
ファイル: FriendManager.cs プロジェクト: Lion1616/ProjectP
 internal Friend(PlayerFriendDto dto)
 {
     AccountId   = (ulong)dto.PlayerId;
     FriendId    = (ulong)dto.FriendId;
     PlayerState = (FriendState)dto.PlayerState;
     FriendState = (FriendState)dto.FriendState;
 }