Beispiel #1
0
        /// <summary>
        /// 数据不同步的回调函数
        /// </summary>
        /// <param name="gcNID">不同步的玩家ID</param>
        /// <param name="frame">不同步的帧</param>
        /// <param name="data1">正常数据</param>
        /// <param name="data2">异常数据</param>
        internal void OnOutOfSync(ulong gcNID, int frame, Google.Protobuf.ByteString data1, Google.Protobuf.ByteString data2)
        {
            BSUser user = BS.instance.userMgr.GetUser(gcNID);

            //发送不同步的数据
            Protos.BS2GC_OutOfSync outOfSync = ProtoCreator.Q_BS2GC_OutOfSync();
            outOfSync.Frame = frame;
            outOfSync.Data1 = data1;
            outOfSync.Data2 = data2;
            BS.instance.netSessionMgr.Send(user.gcSID, outOfSync);

            //通知CS玩家离开战场
            Protos.BS2CS_KickUser kickUser = ProtoCreator.Q_BS2CS_KickUser();
            kickUser.GcNID  = gcNID;
            kickUser.Reason = Protos.BS2CS_KickUser.Types.Reason.OutOfSync;
            BS.instance.netSessionMgr.Send(SessionType.ServerB2CS, kickUser);

            //断开玩家连接
            BS.instance.netSessionMgr.CloseSession(user.gcSID, "different snapshot crc32 value");
        }
Beispiel #2
0
        public void OnGCSessionClosed(NetSessionBase session, string reason)
        {
            ClientSession gcSession = ( ClientSession )session;

            gcSession.activeTime = 0;

            //检查玩家是否登陆了
            BSUser user = BS.instance.userMgr.GetUser(gcSession.id);

            if (user != null)
            {
                if (reason != "battle_end")
                {
                    //通知cs玩家断线
                    Protos.BS2CS_KickUser msg = ProtoCreator.Q_BS2CS_KickUser();
                    msg.Reason = Protos.BS2CS_KickUser.Types.Reason.Gclost;
                    msg.GcNID  = user.gcNID;
                    BS.instance.netSessionMgr.Send(SessionType.ServerB2CS, msg);
                    BS.instance.userMgr.OnDisconnect(user);
                }
            }
        }
Beispiel #3
0
        /// <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);
        }