Пример #1
0
        /**
         * 玩家网络状态变化广播
         */
        public void OnChangePlayerNetworkState(BroadcastEvent eve)
        {
            var bst = new ChangePlayerNetworkStateBst();

            bst.MergeFrom((ByteString)eve.Data);
            var roomInfo = (RoomInfo)bst.RoomInfo;

            this.Save(eve, roomInfo);
            eve.Data = bst;
            _room.OnChangePlayerNetworkState?.Invoke(eve);
        }
Пример #2
0
        public void TriggerNetWorkBroadcast(ChangePlayerNetworkStateBst bst, string bstSeq)
        {
            if (this._group?.GroupInfo?.Id + "" == "")
            {
                return;
            }

            Action <GroupInfo, string> action = (groupInfo, seq) =>
            {
                if (groupInfo == null)
                {
                    return;
                }

                if (groupInfo.Id != this._group?.GroupInfo?.Id)
                {
                    return;
                }

                GroupPlayerInfo groupPlayerInfo = null;

                foreach (var playerInfo in groupInfo.GroupPlayerList)
                {
                    if (((GroupPlayerInfo)playerInfo).Id == bst.ChangePlayerId)
                    {
                        groupPlayerInfo = (GroupPlayerInfo)playerInfo;
                    }
                }

                if (groupPlayerInfo == null)
                {
                    return;
                }

                if (groupPlayerInfo.CommonGroupNetworkState != bst.NetworkState)
                {
                    return;
                }

                ChangeGroupPlayerNetworkStateBst stateBst = new ChangeGroupPlayerNetworkStateBst
                {
                    ChangePlayerId = bst.ChangePlayerId,
                    NetworkState   = bst.NetworkState,
                    GroupInfo      = groupInfo
                };

                BroadcastEvent eve = new BroadcastEvent(stateBst, bstSeq + "_" + seq);

                this._group?.OnChangeGroupPlayerNetworkState(eve);
            };

            this._group?.GetGroupDetail(eve =>
            {
                if (eve.Code != ErrCode.EcOk || eve.Data == null)
                {
                    return;
                }

                var rsp       = (GetGroupByGroupIdRsp)eve.Data;
                var groupInfo = rsp.GroupInfo;

                action?.Invoke(groupInfo, eve.Seq);
            });
        }