public void SetFieldValue(FieldKey key, FieldOperation operation) { if (!_changedFields.Contains(key)) _changedFields.Add(key); _FieldValues[key] = operation; }
public Field FindField(FieldKey key) { Type type = FindType(key); Field member = type.FindField(key); if (member == null) { member = type.AddField(key); } return member; }
public FieldValue(FieldKey fieldKey, object value, string formatString) : this(fieldKey, value) { this.formatString = formatString; }
public FieldValue(FieldKey fieldKey, object value) : base() { this.fieldKey = fieldKey; this.value = value; }
public Field QueryField(FieldKey queryKey) { Field.Builder field = Field.CreateBuilder().SetKey(queryKey); switch ((FieldKeyHelper.Program)queryKey.Program) { case FieldKeyHelper.Program.D3: if (queryKey.Group == 2 && queryKey.Field == 1) // Banner configuration { field.SetValue( Variant.CreateBuilder().SetMessageValue(BannerConfigurationField.Value.ToByteString()).Build ()); } else if (queryKey.Group == 2 && queryKey.Field == 2) //Hero's EntityId { field.SetValue(Variant.CreateBuilder().SetMessageValue(LastPlayedHeroId.ToByteString()).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 4) //Unknown Bool { field.SetValue(Variant.CreateBuilder().SetBoolValue(false).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 1) // Hero's class (GbidClass) { field.SetValue(Variant.CreateBuilder().SetIntValue(CurrentToon.ClassID).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 2) // Hero's current level { field.SetValue(Variant.CreateBuilder().SetIntValue(CurrentToon.Level).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 3) // Hero's visible equipment { field.SetValue( Variant.CreateBuilder().SetMessageValue( CurrentToon.HeroVisualEquipmentField.Value.ToByteString()).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 4) // Hero's flags (gender and such) { field.SetValue( Variant.CreateBuilder().SetIntValue((uint)(CurrentToon.Flags | ToonFlags.AllUnknowns)). Build()); } else if (queryKey.Group == 3 && queryKey.Field == 5) // Toon name { field.SetValue(Variant.CreateBuilder().SetStringValue(CurrentToon.Name).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 6) { field.SetValue(Variant.CreateBuilder().SetIntValue(0).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 7) { field.SetValue(Variant.CreateBuilder().SetIntValue(0).Build()); } else if (queryKey.Group == 4 && queryKey.Field == 1) // Channel ID if the client is online { if (LoggedInClient != null && LoggedInClient.CurrentChannel != null) field.SetValue( Variant.CreateBuilder().SetMessageValue( LoggedInClient.CurrentChannel.D3EntityId.ToByteString()).Build()); else field.SetValue(Variant.CreateBuilder().Build()); } else if (queryKey.Group == 4 && queryKey.Field == 2) // Current screen (all known values are just "in-menu"; also see ScreenStatuses sent in ChannelService.UpdateChannelState) { field.SetValue(Variant.CreateBuilder().SetIntValue(ScreenStatus.Screen).Build()); } else if (queryKey.Group == 4 && queryKey.Field == 4) //Unknown Bool { field.SetValue(Variant.CreateBuilder().SetBoolValue(false).Build()); } else { Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field); } break; case FieldKeyHelper.Program.BNet: if (queryKey.Group == 2 && queryKey.Field == 1) //GameAccount Logged in { field.SetValue(Variant.CreateBuilder().SetBoolValue(GameAccountStatusField.Value).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 2) // Away status { field.SetValue(Variant.CreateBuilder().SetIntValue((long)AwayStatus).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 3) // Program - always D3 { field.SetValue(Variant.CreateBuilder().SetFourccValue("D3").Build()); } else if (queryKey.Group == 2 && queryKey.Field == 5) // BattleTag { field.SetValue(Variant.CreateBuilder().SetStringValue(Owner.BattleTag).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 7) // DBAccount.EntityId { field.SetValue(Variant.CreateBuilder().SetEntityidValue(Owner.BnetEntityId).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 10) // AFK { field.SetValue( Variant.CreateBuilder().SetBoolValue(AwayStatus != AwayStatusFlag.Available).Build()); } else { Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field); } break; } return field.HasValue ? field.Build() : null; }
public void StartField(FieldKey key) { if (key == null) throw new ArgumentNullException("key"); _fields.Push(key); GetCurrentField(); }
public Field QueryField(FieldKey queryKey) { Field.Builder field = Field.CreateBuilder().SetKey(queryKey); switch ((FieldKeyHelper.Program)queryKey.Program) { case FieldKeyHelper.Program.D3: if (queryKey.Group == 2 && queryKey.Field == 1) // Banner configuration { field.SetValue( Variant.CreateBuilder().SetMessageValue(BannerConfigurationField.Value.ToByteString()).Build ()); } else if (queryKey.Group == 2 && queryKey.Field == 2) //Hero's EntityId { field.SetValue(Variant.CreateBuilder().SetMessageValue(LastPlayedHeroId.ToByteString()).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 4) //Unknown Bool { field.SetValue(Variant.CreateBuilder().SetBoolValue(false).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 1) // Hero's class (GbidClass) { field.SetValue(Variant.CreateBuilder().SetIntValue(CurrentToon.ClassID).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 2) // Hero's current level { field.SetValue(Variant.CreateBuilder().SetIntValue(CurrentToon.Level).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 3) // Hero's visible equipment { field.SetValue( Variant.CreateBuilder().SetMessageValue( CurrentToon.HeroVisualEquipmentField.Value.ToByteString()).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 4) // Hero's flags (gender and such) { field.SetValue( Variant.CreateBuilder().SetIntValue((uint)(CurrentToon.Flags | ToonFlags.AllUnknowns)). Build()); } else if (queryKey.Group == 3 && queryKey.Field == 5) // Toon name { field.SetValue(Variant.CreateBuilder().SetStringValue(CurrentToon.Name).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 6) { field.SetValue(Variant.CreateBuilder().SetIntValue(0).Build()); } else if (queryKey.Group == 3 && queryKey.Field == 7) { field.SetValue(Variant.CreateBuilder().SetIntValue(0).Build()); } else if (queryKey.Group == 4 && queryKey.Field == 1) // Channel ID if the client is online { if (LoggedInClient != null && LoggedInClient.CurrentChannel != null) { field.SetValue( Variant.CreateBuilder().SetMessageValue( LoggedInClient.CurrentChannel.D3EntityId.ToByteString()).Build()); } else { field.SetValue(Variant.CreateBuilder().Build()); } } else if (queryKey.Group == 4 && queryKey.Field == 2) // Current screen (all known values are just "in-menu"; also see ScreenStatuses sent in ChannelService.UpdateChannelState) { field.SetValue(Variant.CreateBuilder().SetIntValue(ScreenStatus.Screen).Build()); } else if (queryKey.Group == 4 && queryKey.Field == 4) //Unknown Bool { field.SetValue(Variant.CreateBuilder().SetBoolValue(false).Build()); } else { Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field); } break; case FieldKeyHelper.Program.BNet: if (queryKey.Group == 2 && queryKey.Field == 1) //GameAccount Logged in { field.SetValue(Variant.CreateBuilder().SetBoolValue(GameAccountStatusField.Value).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 2) // Away status { field.SetValue(Variant.CreateBuilder().SetIntValue((long)AwayStatus).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 3) // Program - always D3 { field.SetValue(Variant.CreateBuilder().SetFourccValue("D3").Build()); } else if (queryKey.Group == 2 && queryKey.Field == 5) // BattleTag { field.SetValue(Variant.CreateBuilder().SetStringValue(Owner.BattleTag).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 7) // DBAccount.EntityId { field.SetValue(Variant.CreateBuilder().SetEntityidValue(Owner.BnetEntityId).Build()); } else if (queryKey.Group == 2 && queryKey.Field == 10) // AFK { field.SetValue( Variant.CreateBuilder().SetBoolValue(AwayStatus != AwayStatusFlag.Available).Build()); } else { Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field); } break; } return(field.HasValue ? field.Build() : null); }
public static FieldKey Create(Program program, OriginatingClass originatingClass, uint field, ulong index) { return (FieldKey.CreateBuilder().SetProgram((uint)program).SetGroup((uint)originatingClass).SetField( field).SetIndex(index).Build()); }
public bnet.protocol.attribute.Variant GetCache(bgs.types.EntityId entity, FieldKey key) { if (key == null) { return(null); } if (!base.ContainsKey(entity)) { return(null); } PresenceAPI.FieldKeyToPresenceMap item = base[entity]; if (!item.ContainsKey(key)) { return(null); } return(item[key]); }
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); }
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>(); using (List <FieldOperation> .Enumerator enumerator = channelState.FieldOperationList.GetEnumerator()) { while (enumerator.MoveNext()) { FieldOperation current = enumerator.get_Current(); if (current.Operation == FieldOperation.Types.OperationType.CLEAR) { this.m_presenceCache.SetCache(entityId, current.Field.Key, null); } else { this.m_presenceCache.SetCache(entityId, current.Field.Key, current.Field.Value); } PresenceUpdate presenceUpdate = default(PresenceUpdate); presenceUpdate.entityId = entityId; presenceUpdate.programId = current.Field.Key.Program; presenceUpdate.groupId = current.Field.Key.Group; presenceUpdate.fieldId = current.Field.Key.Field; presenceUpdate.index = current.Field.Key.Index; presenceUpdate.boolVal = false; presenceUpdate.intVal = 0L; presenceUpdate.stringVal = string.Empty; presenceUpdate.valCleared = false; presenceUpdate.blobVal = new byte[0]; if (current.Operation == FieldOperation.Types.OperationType.CLEAR) { presenceUpdate.valCleared = true; bool flag = fieldKey2.Program == current.Field.Key.Program; bool flag2 = fieldKey2.Group == current.Field.Key.Group; bool flag3 = fieldKey2.Field == current.Field.Key.Field; if (flag && flag2 && flag3) { BnetEntityId entityId2 = BnetEntityId.CreateFromEntityId(presenceUpdate.entityId); this.m_battleNet.Friends.RemoveFriendsActiveGameAccount(entityId2, current.Field.Key.Index); } } else if (current.Field.Value.HasBoolValue) { presenceUpdate.boolVal = current.Field.Value.BoolValue; } else if (current.Field.Value.HasIntValue) { presenceUpdate.intVal = current.Field.Value.IntValue; } else if (current.Field.Value.HasStringValue) { presenceUpdate.stringVal = current.Field.Value.StringValue; } else if (current.Field.Value.HasFourccValue) { presenceUpdate.stringVal = new BnetProgramId(current.Field.Value.FourccValue).ToString(); } else if (current.Field.Value.HasEntityidValue) { presenceUpdate.entityIdVal.hi = current.Field.Value.EntityidValue.High; presenceUpdate.entityIdVal.lo = current.Field.Value.EntityidValue.Low; bool flag4 = fieldKey2.Program == current.Field.Key.Program; bool flag5 = fieldKey2.Group == current.Field.Key.Group; bool flag6 = fieldKey2.Field == current.Field.Key.Field; if (flag4 && flag5 && flag6) { BnetEntityId entityId3 = BnetEntityId.CreateFromEntityId(presenceUpdate.entityId); this.m_battleNet.Friends.AddFriendsActiveGameAccount(entityId3, current.Field.Value.EntityidValue, current.Field.Key.Index); } } else if (current.Field.Value.HasBlobValue) { presenceUpdate.blobVal = current.Field.Value.BlobValue; } else { if (!current.Field.Value.HasMessageValue) { continue; } if (current.Field.Key.Field == 8u) { this.FetchRichPresenceResource(current.Field.Value); this.HandleRichPresenceUpdate(presenceUpdate, current.Field.Key); continue; } continue; } list.Add(presenceUpdate); } } list.Reverse(); this.m_presenceUpdates.AddRange(list); }