public void Push(RoleEnterHolder holder, bool checkRoleId) { int queueCount = 0; lock (this) { if (checkRoleId) { foreach (var i in mLoginQueue) { if (i.roleId == holder.roleId) { return; } } } mLoginQueue.Add(holder); queueCount = mLoginQueue.Count; if (queueCount > 1) { //RPC.PackageWriter pkg = new RPC.PackageWriter(); //H_RPCRoot.smInstance.HGet_GateServer(pkg).ClientTryLoginSuccessed(pkg, loginHolder.LinkHandle, loginHolder.Name, loginHolder.Id); //这里要告诉客户端,还有多少在排队 //pkg.DoCommand(loginHolder.Connect, RPC.CommandTargetType.DefaultType); } } }
void Tick(ServerFrame.DB.DBConnect dbConnect) { DBConnect.Tick(); if (mLoginQueue.Count > 0) { RoleEnterHolder atom = null; lock (this) { atom = mLoginQueue[0]; mLoginQueue.RemoveAt(0); } try { if (atom.RoleCreator != null) { Log.Log.Server.Info("atom.RoleCreator != null"); if (atom.RoleCreator.Exec != null) { atom.RoleCreator.Exec(); } } else { IDataServer.Instance.PlayerManager.Do_RoleLogin(atom); } } catch (System.Exception ex) { Log.Log.Login.Info("登陆失败{0}", atom.roleId); Log.Log.Common.Print(ex.ToString()); Log.Log.Common.Print(ex.StackTrace.ToString()); } } }
public void PushRoleCreator(AsyncExecuter exec) { var sqlAtom = new RoleEnterHolder(); sqlAtom.RoleCreator = exec; this.Push(sqlAtom, false); }