예제 #1
0
        public void HandlePresenceUpdates(ChannelState channelState, ChannelAPI.ChannelReferenceObject channelRef)
        {
            bgs.types.EntityId entityId;
            entityId.hi = channelRef.m_channelData.m_channelId.High;
            entityId.lo = channelRef.m_channelData.m_channelId.Low;
            FieldKey fieldKey = new FieldKey();

            fieldKey.SetProgram(BnetProgramId.BNET.GetValue());
            fieldKey.SetGroup(1u);
            fieldKey.SetField(3u);
            FieldKey fieldKey2         = fieldKey;
            List <PresenceUpdate> list = new List <PresenceUpdate>();

            foreach (FieldOperation fieldOperation in channelState.FieldOperationList)
            {
                if (fieldOperation.Operation == FieldOperation.Types.OperationType.CLEAR)
                {
                    this.m_presenceCache.SetCache(entityId, fieldOperation.Field.Key, null);
                }
                else
                {
                    this.m_presenceCache.SetCache(entityId, fieldOperation.Field.Key, fieldOperation.Field.Value);
                }
                PresenceUpdate presenceUpdate = default(PresenceUpdate);
                presenceUpdate.entityId   = entityId;
                presenceUpdate.programId  = fieldOperation.Field.Key.Program;
                presenceUpdate.groupId    = fieldOperation.Field.Key.Group;
                presenceUpdate.fieldId    = fieldOperation.Field.Key.Field;
                presenceUpdate.index      = fieldOperation.Field.Key.Index;
                presenceUpdate.boolVal    = false;
                presenceUpdate.intVal     = 0L;
                presenceUpdate.stringVal  = string.Empty;
                presenceUpdate.valCleared = false;
                presenceUpdate.blobVal    = new byte[0];
                if (fieldOperation.Operation == FieldOperation.Types.OperationType.CLEAR)
                {
                    presenceUpdate.valCleared = true;
                    bool flag  = fieldKey2.Program == fieldOperation.Field.Key.Program;
                    bool flag2 = fieldKey2.Group == fieldOperation.Field.Key.Group;
                    bool flag3 = fieldKey2.Field == fieldOperation.Field.Key.Field;
                    if (flag && flag2 && flag3)
                    {
                        BnetEntityId entityId2 = BnetEntityId.CreateFromEntityId(presenceUpdate.entityId);
                        this.m_battleNet.Friends.RemoveFriendsActiveGameAccount(entityId2, fieldOperation.Field.Key.Index);
                    }
                }
                else if (fieldOperation.Field.Value.HasBoolValue)
                {
                    presenceUpdate.boolVal = fieldOperation.Field.Value.BoolValue;
                }
                else if (fieldOperation.Field.Value.HasIntValue)
                {
                    presenceUpdate.intVal = fieldOperation.Field.Value.IntValue;
                }
                else if (fieldOperation.Field.Value.HasStringValue)
                {
                    presenceUpdate.stringVal = fieldOperation.Field.Value.StringValue;
                }
                else if (fieldOperation.Field.Value.HasFourccValue)
                {
                    presenceUpdate.stringVal = new BnetProgramId(fieldOperation.Field.Value.FourccValue).ToString();
                }
                else if (fieldOperation.Field.Value.HasEntityidValue)
                {
                    presenceUpdate.entityIdVal.hi = fieldOperation.Field.Value.EntityidValue.High;
                    presenceUpdate.entityIdVal.lo = fieldOperation.Field.Value.EntityidValue.Low;
                    bool flag4 = fieldKey2.Program == fieldOperation.Field.Key.Program;
                    bool flag5 = fieldKey2.Group == fieldOperation.Field.Key.Group;
                    bool flag6 = fieldKey2.Field == fieldOperation.Field.Key.Field;
                    if (flag4 && flag5 && flag6)
                    {
                        BnetEntityId entityId3 = BnetEntityId.CreateFromEntityId(presenceUpdate.entityId);
                        this.m_battleNet.Friends.AddFriendsActiveGameAccount(entityId3, fieldOperation.Field.Value.EntityidValue, fieldOperation.Field.Key.Index);
                    }
                }
                else if (fieldOperation.Field.Value.HasBlobValue)
                {
                    presenceUpdate.blobVal = fieldOperation.Field.Value.BlobValue;
                }
                else
                {
                    if (!fieldOperation.Field.Value.HasMessageValue)
                    {
                        continue;
                    }
                    if (fieldOperation.Field.Key.Field == 8u)
                    {
                        this.FetchRichPresenceResource(fieldOperation.Field.Value);
                        this.HandleRichPresenceUpdate(presenceUpdate, fieldOperation.Field.Key);
                        continue;
                    }
                    continue;
                }
                list.Add(presenceUpdate);
            }
            list.Reverse();
            this.m_presenceUpdates.AddRange(list);
        }
예제 #2
0
        public void HandlePresenceUpdates(ChannelState channelState, ChannelAPI.ChannelReferenceObject channelRef)
        {
            bgs.types.EntityId high = new bgs.types.EntityId();
            high.hi = channelRef.m_channelData.m_channelId.High;
            high.lo = channelRef.m_channelData.m_channelId.Low;
            FieldKey fieldKey = new FieldKey();

            fieldKey.SetProgram(BnetProgramId.BNET.GetValue());
            fieldKey.SetGroup(1);
            fieldKey.SetField(3);
            FieldKey fieldKey1 = fieldKey;
            List <PresenceUpdate> presenceUpdates = new List <PresenceUpdate>();

            foreach (FieldOperation fieldOperationList in channelState.FieldOperationList)
            {
                if (fieldOperationList.Operation != FieldOperation.Types.OperationType.CLEAR)
                {
                    this.m_presenceCache.SetCache(high, fieldOperationList.Field.Key, fieldOperationList.Field.Value);
                }
                else
                {
                    this.m_presenceCache.SetCache(high, fieldOperationList.Field.Key, null);
                }
                PresenceUpdate boolValue = new PresenceUpdate()
                {
                    entityId   = high,
                    programId  = fieldOperationList.Field.Key.Program,
                    groupId    = fieldOperationList.Field.Key.Group,
                    fieldId    = fieldOperationList.Field.Key.Field,
                    index      = fieldOperationList.Field.Key.Index,
                    boolVal    = false,
                    intVal     = (long)0,
                    stringVal  = string.Empty,
                    valCleared = false,
                    blobVal    = new byte[0]
                };
                if (fieldOperationList.Operation == FieldOperation.Types.OperationType.CLEAR)
                {
                    boolValue.valCleared = true;
                    bool program = fieldKey1.Program == fieldOperationList.Field.Key.Program;
                    bool group   = fieldKey1.Group == fieldOperationList.Field.Key.Group;
                    bool field   = fieldKey1.Field == fieldOperationList.Field.Key.Field;
                    if (program && group && field)
                    {
                        BnetEntityId bnetEntityId = BnetEntityId.CreateFromEntityId(boolValue.entityId);
                        this.m_battleNet.Friends.RemoveFriendsActiveGameAccount(bnetEntityId, fieldOperationList.Field.Key.Index);
                    }
                }
                else if (fieldOperationList.Field.Value.HasBoolValue)
                {
                    boolValue.boolVal = fieldOperationList.Field.Value.BoolValue;
                }
                else if (fieldOperationList.Field.Value.HasIntValue)
                {
                    boolValue.intVal = fieldOperationList.Field.Value.IntValue;
                }
                else if (fieldOperationList.Field.Value.HasStringValue)
                {
                    boolValue.stringVal = fieldOperationList.Field.Value.StringValue;
                }
                else if (fieldOperationList.Field.Value.HasFourccValue)
                {
                    boolValue.stringVal = (new BnetProgramId(fieldOperationList.Field.Value.FourccValue)).ToString();
                }
                else if (fieldOperationList.Field.Value.HasEntityidValue)
                {
                    boolValue.entityIdVal.hi = fieldOperationList.Field.Value.EntityidValue.High;
                    boolValue.entityIdVal.lo = fieldOperationList.Field.Value.EntityidValue.Low;
                    bool flag   = fieldKey1.Program == fieldOperationList.Field.Key.Program;
                    bool group1 = fieldKey1.Group == fieldOperationList.Field.Key.Group;
                    bool field1 = fieldKey1.Field == fieldOperationList.Field.Key.Field;
                    if (flag && group1 && field1)
                    {
                        BnetEntityId bnetEntityId1 = BnetEntityId.CreateFromEntityId(boolValue.entityId);
                        this.m_battleNet.Friends.AddFriendsActiveGameAccount(bnetEntityId1, fieldOperationList.Field.Value.EntityidValue, fieldOperationList.Field.Key.Index);
                    }
                }
                else if (fieldOperationList.Field.Value.HasBlobValue)
                {
                    boolValue.blobVal = fieldOperationList.Field.Value.BlobValue;
                }
                else if (!fieldOperationList.Field.Value.HasMessageValue)
                {
                    continue;
                }
                else if (fieldOperationList.Field.Key.Field != 8)
                {
                    continue;
                }
                else
                {
                    this.FetchRichPresenceResource(fieldOperationList.Field.Value);
                    this.HandleRichPresenceUpdate(boolValue, fieldOperationList.Field.Key);
                    continue;
                }
                presenceUpdates.Add(boolValue);
            }
            presenceUpdates.Reverse();
            this.m_presenceUpdates.AddRange(presenceUpdates);
        }