using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Sog; using ProtoCSStruct; namespace Friend { public static class FriendUtils { /// /// 更新整个self数据到friendOne,包括所有数据 /// 类似的操作都调用这个 /// /// /// public static void CopySelfToFriendOne(ref DBFriendSelf self, ref DBFriendOne friendOne) { friendOne.Uid = self.Uid; friendOne.Icon = self.Icon; friendOne.Nick = self.Nick; friendOne.Level = self.Level; friendOne.LastLoginTime = self.LastLoginTime; friendOne.VipExp = self.VipExp; friendOne.VipLevel = self.VipLevel; friendOne.Chip = self.Chip; friendOne.Gender = self.Gender; friendOne.MaxPassMainlandId = self.MaxPassMainlandId; friendOne.MainlineFightPower = self.MainlineFightPower; friendOne.RealmName = self.RealmName; friendOne.IsOnline = self.IsOnline; friendOne.LastLogoutTime = (int)self.LastLogoutTime; friendOne.IconFrameId = self.IconFrameId; friendOne.RealmId = self.RealmId; } public static void CopySelfToRemoteFriend(ref DBFriendSelf self, ref RemoteFriendOneStruct remoteFriend) { remoteFriend.Uid = self.Uid; remoteFriend.Icon = self.Icon; remoteFriend.Nick = self.Nick; remoteFriend.Level = self.Level; remoteFriend.LastLoginTime = self.LastLoginTime; remoteFriend.VipExp = self.VipExp; remoteFriend.VipLevel = self.VipLevel; remoteFriend.Chip = self.Chip; remoteFriend.Gender = self.Gender; remoteFriend.MaxPassMainlandId = self.MaxPassMainlandId; remoteFriend.MainlineFightPower = self.MainlineFightPower; remoteFriend.RealmName = self.RealmName; remoteFriend.MainlineHeros = self.MainlineHeros; remoteFriend.IsOnline = self.IsOnline; remoteFriend.LastLogoutTime = (int)self.LastLogoutTime; remoteFriend.IconFrameId = self.IconFrameId; remoteFriend.RealmId = self.RealmId; remoteFriend.LastAccessTime = FriendServerUtils.GetTimeSecond(); } public static void CopyDBFriendToRemoteFriend(ref DBFriendOne dbFriend, ref RepeatedDBFriendHeroOne_8 heroList, ref RemoteFriendOneStruct remoteFriend) { remoteFriend.Uid = dbFriend.Uid; remoteFriend.Icon = dbFriend.Icon; remoteFriend.Nick = dbFriend.Nick; remoteFriend.Level = dbFriend.Level; remoteFriend.LastLoginTime = dbFriend.LastLoginTime; remoteFriend.VipExp = dbFriend.VipExp; remoteFriend.VipLevel = dbFriend.VipLevel; remoteFriend.Chip = dbFriend.Chip; remoteFriend.Gender = dbFriend.Gender; remoteFriend.MaxPassMainlandId = dbFriend.MaxPassMainlandId; remoteFriend.MainlineFightPower = dbFriend.MainlineFightPower; remoteFriend.RealmName = dbFriend.RealmName; remoteFriend.MainlineHeros = heroList; remoteFriend.IsOnline = dbFriend.IsOnline; remoteFriend.LastLogoutTime = dbFriend.LastLogoutTime; remoteFriend.IconFrameId = dbFriend.IconFrameId; remoteFriend.RealmId = dbFriend.RealmId; remoteFriend.LastAccessTime = FriendServerUtils.GetTimeSecond(); } public static void CopyRemoteFriendToDBFriend(ref RemoteFriendOneStruct remoteFriend, ref DBFriendOne dbFriend) { dbFriend.Uid = remoteFriend.Uid; dbFriend.Icon = remoteFriend.Icon; dbFriend.Nick = remoteFriend.Nick; dbFriend.Level = remoteFriend.Level; dbFriend.LastLoginTime = remoteFriend.LastLoginTime; dbFriend.VipExp = remoteFriend.VipExp; dbFriend.VipLevel = remoteFriend.VipLevel; dbFriend.Chip = remoteFriend.Chip; dbFriend.Gender = remoteFriend.Gender; dbFriend.MaxPassMainlandId = remoteFriend.MaxPassMainlandId; dbFriend.MainlineFightPower = remoteFriend.MainlineFightPower; dbFriend.RealmName = remoteFriend.RealmName; dbFriend.IsOnline = remoteFriend.IsOnline; dbFriend.LastLogoutTime = remoteFriend.LastLogoutTime; dbFriend.IconFrameId = remoteFriend.IconFrameId; dbFriend.RealmId = remoteFriend.RealmId; remoteFriend.LastAccessTime = FriendServerUtils.GetTimeSecond(); } public static void CopyDBFriendChatToCSChat(ref DBFriendChatOne friendChat, ref CSChatRes chatRes) { chatRes.Uid = friendChat.SenderUid; chatRes.Nick = friendChat.SenderNick; chatRes.Icon = friendChat.SenderIcon; chatRes.Gender = friendChat.SenderGender; chatRes.Message = friendChat.Message; chatRes.SendTime = friendChat.SendTime; chatRes.ChatSeq = friendChat.ChatSeq; chatRes.TargetUid = friendChat.TargetUid; chatRes.IconFrameId = friendChat.IconFrameId; } /// /// 比较self和玩家身上rolebase信息,如果不同则更新 /// /// /// /// /// public static bool CheckAndChangeSelfByPlayer(PlayerInfoFriend player, ref DBFriendSelf self, ref DBRoleBase roleBase) { bool bChg = false; if (self.Level != roleBase.Level) { self.Level = roleBase.Level; bChg = true; } if (self.Nick.Equals(roleBase.Nick.GetPtr()) == false) { self.Nick.SetString(roleBase.Nick.GetPtr()); bChg = true; } if (self.Icon.Equals(roleBase.Icon.GetPtr()) == false) { self.Icon.SetString(roleBase.Icon.GetPtr()); bChg = true; } if (self.VipExp != roleBase.VipExp) { self.VipExp = roleBase.VipExp; bChg = true; } if (self.VipLevel != roleBase.VipLevel) { self.VipLevel = roleBase.VipLevel; bChg = true; } if (self.Chip != roleBase.Chip) { self.Chip = roleBase.Chip; bChg = true; } if (self.Diamond != roleBase.Diamond) { self.Diamond = roleBase.Diamond; bChg = true; } if (self.MaxPassMainlandId != player.mainlinePassId) { self.MaxPassMainlandId = player.mainlinePassId; bChg = true; } if (self.MainlineFightPower != player.mainlineFightPower) { self.MainlineFightPower = player.mainlineFightPower; bChg = true; } // 现在客户端显示的阵容数据是world下发的, 没用FriendSvr // gamesvr计算好之后发到friendsvr保存在PlayerInfoFriend, tick时更新到DBFriendSelf //for (int i = 0; i < self.MainlineHeros.Count && i < player.MainlineHeros.Count; i++) //{ // if (self.MainlineHeros[i].DescId != player.MainlineHeros[i].DescId // || self.MainlineHeros[i].Power != player.MainlineHeros[i].Power) // { // self.MainlineHeros[i] = player.MainlineHeros[i]; // bChg = true; // } //} if (self.IsOnline != player.IsOnline) { self.IsOnline = player.IsOnline; bChg = true; } if (self.LastLoginTime != player.LoginTime) { self.LastLoginTime = player.LoginTime; bChg = true; } if (self.LastLogoutTime != player.LogoutTime) { self.LastLogoutTime = player.LogoutTime; bChg = true; } if (self.IconFrameId != player.iconFrameId) { self.IconFrameId = player.iconFrameId; bChg = true; } return bChg; } public static bool CheckAndChangeSelfByRoleData(PlayerInfoFriend player, ref DBFriendSelf self, ref DBRoleBase roleBase, ref SSSaveRoleNotify saveRoleNotify) { bool bChg = CheckAndChangeSelfByPlayer(player, ref self, ref roleBase); if (self.HideMyInfo != saveRoleNotify.HideMyInfo) { self.HideMyInfo = saveRoleNotify.HideMyInfo; bChg = true; } return bChg; } /// /// 比较self和friendOne的数据,如果不同则更新friendOne /// /// /// /// public static bool CheckAndChangeFriendOneByRemoteFriend(ref DBFriendOneStruct friendOne, ref RemoteFriendOneStruct remoteFriend) { bool bChg = false; if (friendOne.oneFriend.Level != remoteFriend.Level) { friendOne.oneFriend.Level = remoteFriend.Level; bChg = true; } if (friendOne.oneFriend.Nick.Equals(remoteFriend.Nick.GetPtr()) == false) { friendOne.oneFriend.Nick.SetString(remoteFriend.Nick.GetPtr()); bChg = true; } if (friendOne.oneFriend.Icon.Equals(remoteFriend.Icon.GetPtr()) == false) { friendOne.oneFriend.Icon.SetString(remoteFriend.Icon.GetPtr()); bChg = true; } if (friendOne.oneFriend.VipExp != remoteFriend.VipExp) { friendOne.oneFriend.VipExp = remoteFriend.VipExp; bChg = true; } if (friendOne.oneFriend.VipLevel != remoteFriend.VipLevel) { friendOne.oneFriend.VipLevel = remoteFriend.VipLevel; bChg = true; } if (friendOne.oneFriend.MaxPassMainlandId != remoteFriend.MaxPassMainlandId) { friendOne.oneFriend.MaxPassMainlandId = remoteFriend.MaxPassMainlandId; bChg = true; } if (friendOne.oneFriend.MainlineFightPower != remoteFriend.MainlineFightPower) { friendOne.oneFriend.MainlineFightPower = remoteFriend.MainlineFightPower; bChg = true; } if (friendOne.oneFriend.IsOnline != remoteFriend.IsOnline) { friendOne.oneFriend.IsOnline = remoteFriend.IsOnline; bChg = true; } if (friendOne.oneFriend.LastLoginTime != remoteFriend.LastLoginTime) { friendOne.oneFriend.LastLoginTime = remoteFriend.LastLoginTime; bChg = true; } if (friendOne.oneFriend.LastLogoutTime != remoteFriend.LastLogoutTime) { friendOne.oneFriend.LastLogoutTime = remoteFriend.LastLogoutTime; bChg = true; } if (friendOne.oneFriend.IconFrameId != remoteFriend.IconFrameId) { friendOne.oneFriend.IconFrameId = remoteFriend.IconFrameId; bChg = true; } if (friendOne.oneFriend.RealmId != remoteFriend.RealmId) { friendOne.oneFriend.RealmId = remoteFriend.RealmId; bChg = true; } if (friendOne.oneFriend.RealmName.Equals(remoteFriend.RealmName.GetPtr()) == false) { friendOne.oneFriend.RealmName.SetString(remoteFriend.RealmName.GetPtr()); bChg = true; } return bChg; } public static bool CheckAndChangeFriendOne(ref DBFriendOneStruct friendOne, ref FriendCacheInfoStruct selfInfo) { ref DBFriendSelf self = ref selfInfo.Self; bool bChg = false; if (friendOne.oneFriend.Level != self.Level) { friendOne.oneFriend.Level = self.Level; bChg = true; } if (friendOne.oneFriend.Nick.Equals(self.Nick.GetPtr()) == false) { friendOne.oneFriend.Nick.SetString(self.Nick.GetPtr()); bChg = true; } if (friendOne.oneFriend.Icon.Equals(self.Icon.GetPtr()) == false) { friendOne.oneFriend.Icon.SetString(self.Icon.GetPtr()); bChg = true; } if (friendOne.oneFriend.VipExp != self.VipExp) { friendOne.oneFriend.VipExp = self.VipExp; bChg = true; } if (friendOne.oneFriend.VipLevel != self.VipLevel) { friendOne.oneFriend.VipLevel = self.VipLevel; bChg = true; } if (friendOne.oneFriend.IsOnline != self.IsOnline) { friendOne.oneFriend.IsOnline = self.IsOnline; bChg = true; } if (friendOne.oneFriend.LastLoginTime != self.LastLoginTime) { friendOne.oneFriend.LastLoginTime = self.LastLoginTime; bChg = true; } if (friendOne.oneFriend.LastLogoutTime != (int)self.LastLogoutTime) { friendOne.oneFriend.LastLogoutTime = (int)self.LastLogoutTime; bChg = true; } if (friendOne.oneFriend.MaxPassMainlandId != self.MaxPassMainlandId) { friendOne.oneFriend.MaxPassMainlandId = self.MaxPassMainlandId; bChg = true; } if (friendOne.oneFriend.MainlineFightPower != self.MainlineFightPower) { friendOne.oneFriend.MainlineFightPower = self.MainlineFightPower; bChg = true; } if (friendOne.oneFriend.IconFrameId != self.IconFrameId) { friendOne.oneFriend.IconFrameId = self.IconFrameId; bChg = true; } if (friendOne.oneFriend.RealmId != self.RealmId) { friendOne.oneFriend.RealmId = self.RealmId; bChg = true; } if (friendOne.oneFriend.RealmName.Equals(self.RealmName.GetPtr()) == false) { friendOne.oneFriend.RealmName.SetString(self.RealmName.GetPtr()); bChg = true; } return bChg; } //2周内登录过的算活跃好友 public static int GetActivityFriendCount(ref FriendCacheInfoStruct info) { int count = 0; //这周开始时间 long nowSecond = FriendServerUtils.GetTimeSecond(); long todayStartTime = AppTime.GetTodayStartTime(nowSecond); long weekStartTime = AppTime.GetThisWeekStartTime1(nowSecond); //改成30天 long activityTimeBegin = todayStartTime - 30 * AppTime.SECONDS_ADAY; //遍历自己的所有好友 for (int i=0;i= activityTimeBegin) { count++; } } return count; } public static void MakeQueryOtherDetailBySelf(ref CSQueryOtherDetailRes res, ref DBFriendSelf self) { res.TargetUid = self.Uid; res.Nick = self.Nick; res.Level = self.Level; res.Icon = self.Icon; res.VipLevel = self.VipLevel; res.Exp = self.Exp; res.Chip = self.Chip; res.Diamond = self.Diamond; res.IconFrameId = self.IconFrameId; res.HideInfo = self.HideMyInfo; } // 玩家是否属于当前这个服务器 public static bool IsPlayerBelongThisServer(long uid) { uint friendInstId = (uint)(uid % FriendSvrIDUtils.friendSvrNum); if (friendInstId == 0) { friendInstId = (uint) FriendSvrIDUtils.friendSvrNum; } return friendInstId == Sog.ServerIDUtils.GetInstanceID(FriendServerUtils.GetAppID()); } } }