Exemplo n.º 1
0
		public override void NotifyUpdateMemberState(Google.ProtocolBuffers.IRpcController controller, UpdateMemberStateNotification request, Action<bnet.protocol.NO_RESPONSE> done) {
			throw new NotImplementedException();
		}
Exemplo n.º 2
0
        private void HandleChannelSubscriber_NotifyUpdateMemberState(RPCContext context)
        {
            UpdateMemberStateNotification updateMemberStateNotification = UpdateMemberStateNotification.ParseFrom(context.Payload);

            base.ApiLog.LogDebug("HandleChannelSubscriber_NotifyUpdateMemberState: " + updateMemberStateNotification);
            ChannelAPI.ChannelReferenceObject channelReferenceObject = this.GetChannelReferenceObject(context.Header.ObjectId);
            if (channelReferenceObject == null)
            {
                base.ApiLog.LogError("HandleChannelSubscriber_NotifyUpdateMemberState had unexpected traffic for objectId : " + context.Header.ObjectId);
                return;
            }
            ChannelAPI.ChannelType channelType = channelReferenceObject.m_channelData.m_channelType;
            ChannelAPI.ChannelData channelData = (ChannelAPI.ChannelData)channelReferenceObject.m_channelData;
            EntityId        channelId          = channelData.m_channelId;
            List <EntityId> list = null;

            for (int i = 0; i < updateMemberStateNotification.StateChangeList.get_Count(); i++)
            {
                Member deltaMember = updateMemberStateNotification.StateChangeList.get_Item(i);
                if (!deltaMember.Identity.HasGameAccountId)
                {
                    base.ApiLog.LogError("HandleChannelSubscriber_NotifyUpdateMemberState no identity/gameAccount in Member list at index={0} channelId={1}-{2}", new object[]
                    {
                        i,
                        channelId.High,
                        channelId.Low
                    });
                }
                else
                {
                    EntityId gameAccountId    = deltaMember.Identity.GameAccountId;
                    Map <string, Variant> map = null;
                    Member member;
                    Member cachedMember;
                    if (!channelData.m_members.TryGetValue(gameAccountId, out cachedMember))
                    {
                        member = deltaMember;
                    }
                    else
                    {
                        Member      cachedMember2 = cachedMember;
                        MemberState state         = cachedMember.State;
                        if (deltaMember.State.AttributeCount > 0)
                        {
                            if (map == null)
                            {
                                map = new Map <string, Variant>();
                            }
                            for (int j = 0; j < deltaMember.State.AttributeCount; j++)
                            {
                                Attribute attribute = deltaMember.State.AttributeList.get_Item(j);
                                int       num       = -1;
                                for (int k = 0; k < state.AttributeList.get_Count(); k++)
                                {
                                    Attribute attribute2 = state.AttributeList.get_Item(k);
                                    if (attribute2.Name == attribute.Name)
                                    {
                                        num = k;
                                        break;
                                    }
                                }
                                if (attribute.Value.IsNone())
                                {
                                    if (num >= 0)
                                    {
                                        state.AttributeList.RemoveAt(num);
                                    }
                                }
                                else if (num >= 0)
                                {
                                    state.Attribute.set_Item(num, attribute);
                                }
                                else
                                {
                                    state.AddAttribute(attribute);
                                }
                                map.Add(attribute.Name, attribute.Value);
                            }
                        }
                        else
                        {
                            if (deltaMember.State.HasPrivileges)
                            {
                                state.Privileges = deltaMember.State.Privileges;
                            }
                            if (cachedMember.State.RoleCount != deltaMember.State.RoleCount || !Enumerable.All <uint>(cachedMember.State.RoleList, (uint roleId) => deltaMember.State.RoleList.Contains(roleId)) || !Enumerable.All <uint>(deltaMember.State.RoleList, (uint roleId) => cachedMember.State.RoleList.Contains(roleId)))
                            {
                                if (list == null)
                                {
                                    list = new List <EntityId>();
                                }
                                list.Add(gameAccountId);
                                state.ClearRole();
                                state.Role.AddRange(deltaMember.State.RoleList);
                            }
                            if (deltaMember.State.HasInfo)
                            {
                                if (state.HasInfo)
                                {
                                    if (deltaMember.State.Info.HasBattleTag)
                                    {
                                        state.Info.SetBattleTag(deltaMember.State.Info.BattleTag);
                                    }
                                }
                                else
                                {
                                    state.SetInfo(deltaMember.State.Info);
                                }
                            }
                        }
                        cachedMember2.SetState(state);
                        member = cachedMember2;
                    }
                    if (member != null)
                    {
                        channelData.m_members[gameAccountId] = member;
                    }
                    if (map != null)
                    {
                    }
                }
            }
            if (list != null)
            {
                bool flag = channelType == ChannelAPI.ChannelType.PARTY_CHANNEL;
                if (flag)
                {
                    this.m_battleNet.Party.MemberRolesChanged(channelReferenceObject, list);
                }
            }
        }
Exemplo n.º 3
0
        public override void CallServerMethod(uint token, uint methodId, CodedInputStream stream)
        {
            switch (methodId)
            {
            case 1:
            {
                JoinNotification request = new JoinNotification();
                request.MergeFrom(stream);


                BattlenetRpcErrorCode status = HandleOnJoin(request);
                Log.outDebug(LogFilter.ServiceProtobuf, "{0} Client called server method ChannelListener.OnJoin(bgs.protocol.channel.v1.JoinNotification: {1}) status: {2}.",
                             GetCallerInfo(), request.ToString(), status);
                if (status != 0)
                {
                    SendResponse(token, status);
                }
                break;
            }

            case 2:
            {
                MemberAddedNotification request = new MemberAddedNotification();
                request.MergeFrom(stream);


                BattlenetRpcErrorCode status = HandleOnMemberAdded(request);
                Log.outDebug(LogFilter.ServiceProtobuf, "{0} Client called server method ChannelListener.OnMemberAdded(bgs.protocol.channel.v1.MemberAddedNotification: {1}) status: {2}.",
                             GetCallerInfo(), request.ToString(), status);
                if (status != 0)
                {
                    SendResponse(token, status);
                }
                break;
            }

            case 3:
            {
                LeaveNotification request = new LeaveNotification();
                request.MergeFrom(stream);


                BattlenetRpcErrorCode status = HandleOnLeave(request);
                Log.outDebug(LogFilter.ServiceProtobuf, "{0} Client called server method ChannelListener.OnLeave(bgs.protocol.channel.v1.LeaveNotification: {1}) status: {2}.",
                             GetCallerInfo(), request.ToString(), status);
                if (status != 0)
                {
                    SendResponse(token, status);
                }
                break;
            }

            case 4:
            {
                MemberRemovedNotification request = new MemberRemovedNotification();
                request.MergeFrom(stream);


                BattlenetRpcErrorCode status = HandleOnMemberRemoved(request);
                Log.outDebug(LogFilter.ServiceProtobuf, "{0} Client called server method ChannelListener.OnMemberRemoved(bgs.protocol.channel.v1.MemberRemovedNotification: {1}) status: {2}.",
                             GetCallerInfo(), request.ToString(), status);
                if (status != 0)
                {
                    SendResponse(token, status);
                }
                break;
            }

            case 5:
            {
                SendMessageNotification request = new SendMessageNotification();
                request.MergeFrom(stream);


                BattlenetRpcErrorCode status = HandleOnSendMessage(request);
                Log.outDebug(LogFilter.ServiceProtobuf, "{0} Client called server method ChannelListener.OnSendMessage(bgs.protocol.channel.v1.SendMessageNotification: {1}) status: {2}.",
                             GetCallerInfo(), request.ToString(), status);
                if (status != 0)
                {
                    SendResponse(token, status);
                }
                break;
            }

            case 6:
            {
                UpdateChannelStateNotification request = new UpdateChannelStateNotification();
                request.MergeFrom(stream);


                BattlenetRpcErrorCode status = HandleOnUpdateChannelState(request);
                Log.outDebug(LogFilter.ServiceProtobuf, "{0} Client called server method ChannelListener.OnUpdateChannelState(bgs.protocol.channel.v1.UpdateChannelStateNotification: {1}) status: {2}.",
                             GetCallerInfo(), request.ToString(), status);
                if (status != 0)
                {
                    SendResponse(token, status);
                }
                break;
            }

            case 7:
            {
                UpdateMemberStateNotification request = new UpdateMemberStateNotification();
                request.MergeFrom(stream);


                BattlenetRpcErrorCode status = HandleOnUpdateMemberState(request);
                Log.outDebug(LogFilter.ServiceProtobuf, "{0} Client called server method ChannelListener.OnUpdateMemberState(bgs.protocol.channel.v1.UpdateMemberStateNotification: {1}) status: {2}.",
                             GetCallerInfo(), request.ToString(), status);
                if (status != 0)
                {
                    SendResponse(token, status);
                }
                break;
            }

            default:
                Log.outError(LogFilter.ServiceProtobuf, "Bad method id {0}.", methodId);
                SendResponse(token, BattlenetRpcErrorCode.RpcInvalidMethod);
                break;
            }
        }
Exemplo n.º 4
0
 BattlenetRpcErrorCode HandleOnUpdateMemberState(UpdateMemberStateNotification request)
 {
     Log.outError(LogFilter.ServiceProtobuf, "{0} Client tried to call not implemented method ChannelListener.OnUpdateMemberState: {1}",
                  GetCallerInfo(), request.ToString());
     return(BattlenetRpcErrorCode.RpcNotImplemented);
 }
Exemplo n.º 5
0
 public override void NotifyUpdateMemberState(Google.ProtocolBuffers.IRpcController controller, UpdateMemberStateNotification request, Action <bnet.protocol.NO_RESPONSE> done)
 {
     throw new NotImplementedException();
 }