public override void NotifyUpdateMemberState(Google.ProtocolBuffers.IRpcController controller, UpdateMemberStateNotification request, Action<bnet.protocol.NO_RESPONSE> done) { throw new NotImplementedException(); }
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); } } }
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; } }
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); }
public override void NotifyUpdateMemberState(Google.ProtocolBuffers.IRpcController controller, UpdateMemberStateNotification request, Action <bnet.protocol.NO_RESPONSE> done) { throw new NotImplementedException(); }