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); }
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); }