internal void KickUser(CSUser user, Protos.CS2GS_KickGC.Types.EReason reason) { //通知gs玩家被踢下线 Protos.CS2GS_KickGC kickGc = ProtoCreator.Q_CS2GS_KickGC(); kickGc.GcNID = user.gcNID; kickGc.Reason = reason; CS.instance.netSessionMgr.Send(user.gsSID, kickGc); this.Offline(user); }
/// <summary> /// 断开指定玩家连接,由Session在连接关闭时调用 /// </summary> internal bool KickUser(ulong gcNID, Protos.CS2GS_KickGC.Types.EReason reason) { CSUser user = this.GetUser(gcNID); if (user == null) { Logger.Warn($"can not find user:{gcNID}"); return(false); } this.KickUser(user, reason); return(true); }
/// <summary> /// BS通知玩家离开战场 /// </summary> public ErrorCode OnBs2CsKickUser(NetSessionBase session, Google.Protobuf.IMessage message) { Protos.BS2CS_KickUser kickUser = (Protos.BS2CS_KickUser)message; CSUser user = CS.instance.battleStaging.GetUser(kickUser.GcNID); if (user != null) { Protos.CS2GS_KickGC.Types.EReason reason = Protos.CS2GS_KickGC.Types.EReason.OutOfSync; switch (kickUser.Reason) { case Protos.BS2CS_KickUser.Types.Reason.OutOfSync: reason = Protos.CS2GS_KickGC.Types.EReason.OutOfSync; break; case Protos.BS2CS_KickUser.Types.Reason.Gclost: reason = Protos.CS2GS_KickGC.Types.EReason.Bslost; break; } //踢下线 CS.instance.userMgr.KickUser(user, reason); } return(ErrorCode.Success); }