示例#1
0
 public void RemoveTeam(long teamId)
 {
     lock (this.Mutex)
     {
         CopyTeamData td = null;
         if (this.CopyTeamDict.TryGetValue(teamId, out td))
         {
             this.CopyTeamDict.Remove(teamId);
             HashSet <long> teamList = null;
             if (this.CopyId2Teams.TryGetValue(td.FuBenId, out teamList))
             {
                 teamList.Remove(teamId);
             }
             this.TimeLimitCopy.Remove(td.TeamID);
             if (td.KFServerId > 0)
             {
                 this._KFCopyService.RemoveGameTeam(td.KFServerId, td.TeamID);
             }
             foreach (CopyTeamMemberData role in td.TeamRoles)
             {
                 this.RoleId2JoinedTeam.Remove(role.RoleID);
             }
             CopyTeamDestroyData data = new CopyTeamDestroyData();
             data.TeamId = teamId;
             this.AddAsyncEvent(new AsyncDataItem
             {
                 EventType = KuaFuEventTypes.KFCopyTeamDestroty,
                 Args      = new object[]
                 {
                     data
                 }
             });
         }
     }
 }
示例#2
0
        /// <summary>
        /// 队伍销毁 回调
        /// </summary>
        /// <param name="data"></param>
        private void OnTeamDestroy(CopyTeamDestroyData data)
        {
            if (data == null)
            {
                return;
            }

            lock (Mutex)
            {
                CopyTeamData td = null;
                if (!TeamDict.TryGetValue(data.TeamId, out td))
                {
                    return;
                }

                TeamDict.Remove(data.TeamId);
                FuBenSeq2TeamId.Remove(td.FuBenSeqID);
                HashSet <long> teamList = null;
                if (FuBenId2Teams.TryGetValue(td.FuBenId, out teamList))
                {
                    teamList.Remove(td.TeamID);
                }

                foreach (var member in td.TeamRoles)
                {
                    RoleId2JoinedTeam.Remove(member.RoleID);

                    if (member.ServerId != ThisServerId)
                    {
                        continue;
                    }

                    GameClient client = GameManager.ClientMgr.FindClient(member.RoleID);
                    if (client != null)
                    {
                        NotifyTeamStateChanged(client, (int)CopyTeamErrorCodes.LeaveTeam, member.RoleID, 0);
                    }
                }

                // 队长id设为-1, 通知整个队伍
                td.LeaderRoleID = -1;
                NotifyTeamData(td);

                // 清空队伍,然后通知给所有关注列表的人
                td.TeamRoles.Clear();
                td.MemberCount = td.TeamRoles.Count;
                NotifyTeamListChange(td);
            }
        }
示例#3
0
 public void CheckLogAsyncEvents(AsyncDataItem[] evList)
 {
     if (evList != null)
     {
         foreach (AsyncDataItem ev in evList)
         {
             string sql = string.Empty;
             try
             {
                 if (ev.EventType == KuaFuEventTypes.KFCopyTeamCreate)
                 {
                     CopyTeamCreateData data = ev.Args[1] as CopyTeamCreateData;
                     sql = string.Format("INSERT INTO t_kuafu_fuben_game_team(teamid,copyid,by_serverid,by_roleid,createtime) VALUES({0},{1},{2},{3},'{4}')", new object[]
                     {
                         data.TeamId,
                         data.CopyId,
                         data.Member.ServerId,
                         data.Member.RoleID,
                         TimeUtil.NowDateTime().ToString("yyyy-MM-dd HH:mm:ss")
                     });
                 }
                 else if (ev.EventType == KuaFuEventTypes.KFCopyTeamStart)
                 {
                     CopyTeamStartData data2 = ev.Args[1] as CopyTeamStartData;
                     sql = string.Format("UPDATE t_kuafu_fuben_game_team SET starttime='{0}', kf_serverid={1} WHERE teamid={2}", TimeUtil.NowDateTime().ToString("yyyy-MM-dd HH:mm:ss"), data2.ToServerId, data2.TeamId);
                 }
                 else if (ev.EventType == KuaFuEventTypes.KFCopyTeamDestroty)
                 {
                     CopyTeamDestroyData data3 = ev.Args[0] as CopyTeamDestroyData;
                     sql = string.Format("UPDATE t_kuafu_fuben_game_team SET endtime='{0}' WHERE teamid={1}", TimeUtil.NowDateTime().ToString("yyyy-MM-dd HH:mm:ss"), data3.TeamId);
                 }
             }
             catch (Exception ex)
             {
                 LogManager.WriteLog(LogTypes.Error, "KuaFuCopyDbMgr.CheckLogAsyncEvents Failed!!!", ex, true);
             }
             if (!string.IsNullOrEmpty(sql))
             {
                 this.ExecuteSqlNoQuery(sql);
             }
         }
     }
 }
示例#4
0
        public void RemoveTeam(long teamId)
        {
            lock (Mutex)
            {
                CopyTeamData td = null;
                if (!CopyTeamDict.TryGetValue(teamId, out td))
                {
                    return;
                }

                CopyTeamDict.Remove(teamId);
                HashSet <long> teamList = null;
                if (CopyId2Teams.TryGetValue(td.FuBenId, out teamList))
                {
                    teamList.Remove(teamId);
                }

                TimeLimitCopy.Remove(td.TeamID);

                if (td.KFServerId > 0)
                {
                    _KFCopyService.RemoveGameTeam(td.KFServerId, td.TeamID);
                }

                foreach (var role in td.TeamRoles)
                {
                    RoleId2JoinedTeam.Remove(role.RoleID);
                }

                // 异步广播队伍摧毁的事件
                CopyTeamDestroyData data = new CopyTeamDestroyData();
                data.TeamId = teamId;
                AsyncDataItem evItem = new AsyncDataItem();
                evItem.EventType = KuaFuEventTypes.KFCopyTeamDestroty;
                evItem.Args      = new object[1] {
                    data
                };
                AddAsyncEvent(evItem);
            }
        }
示例#5
0
 public KFCopyTeamDestroyEvent(CopyTeamDestroyData data)
     : base((int)GlobalEventTypes.KFCopyTeamDestroy)
 {
     this.Data = data;
 }