protected override void NotifySubscriptionAdded(Net.BNet.BNetClient client) { // Check docs/rpc/fields.txt for fields keys // RealID name field // NOTE: Probably won't ever use this for its actual purpose, but showing the email in final might not be a good idea var fieldKey1 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 1, 1, 0); var field1 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey1).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.Email).Build()).Build(); var fieldOperation1 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field1).Build(); // Hardcoded boolean - always true var fieldKey2 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 1, 2, 0); var field2 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey2).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetBoolValue(true).Build()).Build(); var fieldOperation2 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field2).Build(); // Create a presence.ChannelState var state = bnet.protocol.presence.ChannelState.CreateBuilder().SetEntityId(this.BnetAccountID).AddFieldOperation(fieldOperation1).AddFieldOperation(fieldOperation2).Build(); // Embed in channel.ChannelState var channelState = bnet.protocol.channel.ChannelState.CreateBuilder().SetExtension(bnet.protocol.presence.ChannelState.Presence, state); // Put in addnotification message var builder = bnet.protocol.channel.AddNotification.CreateBuilder().SetChannelState(channelState); // Make the rpc call client.CallMethod(bnet.protocol.channel.ChannelSubscriber.Descriptor.FindMethodByName("NotifyAdd"), builder.Build(), this.DynamicId); }
public bnet.protocol.presence.FieldOperation GetFieldOperation() { var fieldKey = FieldKeyHelper.Create(Program, OriginatingClass, FieldNumber, Index); var field = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetUintValue(Value).Build()).Build(); return(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field).Build()); }
public bnet.protocol.presence.Field GetField() { var fieldKey = FieldKeyHelper.Create(Program, OriginatingClass, FieldNumber, Index); var field = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(Value.ToByteString()).Build()).Build(); return(field); }
public List <bnet.protocol.presence.FieldOperation> GetFieldOperationList() { var operationList = new List <bnet.protocol.presence.FieldOperation>(); foreach (var id in Value) { var Key = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.Account, _fieldNumber, id.High); var Field = bnet.protocol.presence.Field.CreateBuilder().SetKey(Key).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetEntityidValue(id).Build()).Build(); operationList.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(Field).Build()); } return(operationList); }
protected override void NotifySubscriptionAdded(MooNetClient client) { var operations = new List <bnet.protocol.presence.FieldOperation>(); // Selected toon if (this.LoggedInClient != null && this.Digest.LastPlayedHeroId != AccountHasNoToons) { var selectedToonKey = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 1, 1, 0); var selectedToonField = bnet.protocol.presence.Field.CreateBuilder().SetKey(selectedToonKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.Digest.LastPlayedHeroId.ToByteString()).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(selectedToonField).Build()); } // RealID name field - NOTE: Probably won't ever use this for its actual purpose, but showing the email in final might not be a good idea var realNameKey = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 1, 1, 0); var realNameField = bnet.protocol.presence.Field.CreateBuilder().SetKey(realNameKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.Email).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(realNameField).Build()); // Account online? var accountOnlineKey = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 1, 2, 0); var accountOnlineField = bnet.protocol.presence.Field.CreateBuilder().SetKey(accountOnlineKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetBoolValue(this.IsOnline).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(accountOnlineField).Build()); // toon list foreach (var pair in this.Toons) { var toonKey = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 1, 4, 0); var toonField = bnet.protocol.presence.Field.CreateBuilder().SetKey(toonKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(pair.Value.BnetEntityID.ToByteString()).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(toonField).Build()); } var tempNameKey = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 1, 5, 0); var tempNameField = bnet.protocol.presence.Field.CreateBuilder().SetKey(tempNameKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue("NICKTEMPNAME").Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(tempNameField).Build()); // Create a presence.ChannelState var state = bnet.protocol.presence.ChannelState.CreateBuilder().SetEntityId(this.BnetAccountID).AddRangeFieldOperation(operations).Build(); // Embed in channel.ChannelState var channelState = bnet.protocol.channel.ChannelState.CreateBuilder().SetExtension(bnet.protocol.presence.ChannelState.Presence, state); // Put in addnotification message var notification = bnet.protocol.channel.AddNotification.CreateBuilder().SetChannelState(channelState); // Make the rpc call client.MakeTargetedRPC(this, () => bnet.protocol.channel.ChannelSubscriber.CreateStub(client).NotifyAdd(null, notification.Build(), callback => { })); }
public bnet.protocol.presence.FieldOperation GetFieldOperation() { var fieldKey = FieldKeyHelper.Create(Program, OriginatingClass, FieldNumber, Index); var field = bnet.protocol.presence.Field.CreateBuilder(); if (Value == null) { field.SetKey(fieldKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(ByteString.Empty).Build()).Build(); } else { field.SetKey(fieldKey).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(Value.ToByteString()).Build()).Build(); } return(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field).Build()); }
protected override void NotifySubscriptionAdded(Net.BNet.BNetClient client) { // Check docs/rpc/fields.txt for fields keys // Banner configuration var fieldKey1 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 2, 1, 0); var field1 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey1).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(client.Account.BannerConfiguration.ToByteString()).Build()).Build(); var fieldOperation1 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field1).Build(); // Class var fieldKey2 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 1, 0); var field2 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey2).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.ClassID).Build()).Build(); var fieldOperation2 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field2).Build(); // Level var fieldKey3 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 2, 0); var field3 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey3).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.Level).Build()).Build(); var fieldOperation3 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field3).Build(); // Equipment var fieldKey4 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 3, 0); var field4 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey4).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.Equipment.ToByteString()).Build()).Build(); var fieldOperation4 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field4).Build(); // Flags var fieldKey5 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 4, 0); var field5 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey5).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue((uint)(this.Flags | ToonFlags.BothUnknowns)).Build()).Build(); var fieldOperation5 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field5).Build(); // Name var fieldKey6 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 2, 0); var field6 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey6).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.Name).Build()).Build(); var fieldOperation6 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field6).Build(); // Whether the toon is online var fieldKey7 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 3, 0); var field7 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey7).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetBoolValue(true).Build()).Build(); var fieldOperation7 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field7).Build(); // Program - FourCC "D3" var fieldKey8 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 9, 0); var field8 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey8).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetFourccValue("D3").Build()).Build(); var fieldOperation8 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field8).Build(); // Unknown int - maybe highest completed act? /raist var fieldKey9 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 9, 10); var field9 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey9).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(0).Build()).Build(); var fieldOperation9 = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field9).Build(); // Create a presence.ChannelState var state = bnet.protocol.presence.ChannelState.CreateBuilder().SetEntityId(this.BnetEntityID) .AddFieldOperation(fieldOperation1).AddFieldOperation(fieldOperation2).AddFieldOperation(fieldOperation3).AddFieldOperation(fieldOperation4) .AddFieldOperation(fieldOperation5).AddFieldOperation(fieldOperation6).AddFieldOperation(fieldOperation7).AddFieldOperation(fieldOperation8) .AddFieldOperation(fieldOperation9).Build(); // Embed in channel.ChannelState var channelState = bnet.protocol.channel.ChannelState.CreateBuilder().SetExtension(bnet.protocol.presence.ChannelState.Presence, state); // Put in AddNotification message var builder = bnet.protocol.channel.AddNotification.CreateBuilder().SetChannelState(channelState); // Make the RPC call client.CallMethod(bnet.protocol.channel.ChannelSubscriber.Descriptor.FindMethodByName("NotifyAdd"), builder.Build(), this.DynamicId); }
public bnet.protocol.presence.FieldKey GetFieldKey() { return(FieldKeyHelper.Create(Program, OriginatingClass, FieldNumber, Index)); }
public void AddMember(LogNetClient client) { if (HasUser(client)) { Logger.Warn("Attempted to add client {0} to channel when it was already a member of the channel", client.Connection.RemoteEndPoint.ToString()); return; } var identity = client.GetIdentity(false, true, false); bool isOwner = client == this.Owner; var addedMember = new Member(identity, (isOwner) ? Member.Privilege.UnkCreator : Member.Privilege.UnkJoinedMember); //if (this.Members.Count > 0) //{ // addedMember.AddRoles((isOwner) ? Member.Role.PartyLeader : Member.Role.PartyMember, Member.Role.ChannelMember); //} //else //{ addedMember.AddRole((isOwner) ? Member.Role.ChannelCreator : Member.Role.ChannelMember); //} // This needs to be here so that the foreach below will also send to the client that was just added this.Members.Add(client, addedMember); // Cache the built state and member var channelState = this.State.ToBuilder(); if (this.Attributes.Count > 0) { channelState.AddRangeAttribute(this.Attributes.Values); } if (this.Invitations.Count > 0) { channelState.AddRangeInvitation(this.Invitations.Values); } // added member should recieve a NotifyAdd. var addNotification = bnet.protocol.channel.AddNotification.CreateBuilder() .SetChannelState(channelState.Build()) .SetSelf(addedMember.BnetMember) .AddRangeMember(this.Members.Values.ToList().Select(member => member.BnetMember).ToList()).Build(); client.MakeTargetedRPC(this, () => bnet.protocol.channel.ChannelSubscriber.CreateStub(client).NotifyAdd(null, addNotification, callback => { })); //send bnet,2,7 target = addedmember.gameaccount //this always follows channel.AddNotification var fieldKey = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 7, 0); var field = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey); field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(client.Account.BnetEntityId.Low.ToString() + "#1").Build()); var operation = bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field.Build()).Build(); var state = bnet.protocol.presence.ChannelState.CreateBuilder().SetEntityId(client.Account.CurrentGameAccount.BnetEntityId).AddFieldOperation(operation).Build(); var channelStatePresense = bnet.protocol.channel.ChannelState.CreateBuilder().SetExtension(bnet.protocol.presence.ChannelState.Presence, state); var notification = bnet.protocol.channel.UpdateChannelStateNotification.CreateBuilder().SetStateChange(channelStatePresense).Build(); client.MakeTargetedRPC(client.Account.CurrentGameAccount, () => bnet.protocol.channel.ChannelSubscriber.CreateStub(client).NotifyUpdateChannelState(null, notification, callback => { })); if (this.IsGameChannel) { if (client.GameChannel != null) { Logger.Warn("Client {0} in game channel {1}, but joining game channel {2}.", client, client.GameChannel, this); } client.GameChannel = this; } else { if (client.PartyChannel != null) { Logger.Warn("Client {0} in party channel {1}, but joining party channel {2}.", client, client.PartyChannel, this); } client.PartyChannel = this; } client.CurrentChannel = this; // set clients current channel to one he just joined. if (this.Members.Count < 2) { return; } // other members should recieve a NotifyJoin. var joinNotification = bnet.protocol.channel.JoinNotification.CreateBuilder() .SetMember(addedMember.BnetMember).Build(); foreach (var pair in this.Members.Where(pair => pair.Value != addedMember)) // only send this to previous members of the channel. { pair.Key.MakeTargetedRPC(this, () => bnet.protocol.channel.ChannelSubscriber.CreateStub(pair.Key).NotifyJoin(null, joinNotification, callback => { })); } }
protected override void NotifySubscriptionAdded(MooNetClient client) { var operations = new List <bnet.protocol.presence.FieldOperation>(); // Banner configuration var fieldKey1 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 2, 1, 0); var field1 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey1).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(client.Account.BannerConfiguration.ToByteString()).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field1).Build()); // Class var fieldKey2 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 1, 0); var field2 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey2).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.ClassID).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field2).Build()); // Level var fieldKey3 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 2, 0); var field3 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey3).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.Level).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field3).Build()); // Equipment var fieldKey4 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 3, 0); var field4 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey4).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.Equipment.ToByteString()).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field4).Build()); // Flags var fieldKey5 = FieldKeyHelper.Create(FieldKeyHelper.Program.D3, 3, 4, 0); var field5 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey5).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue((uint)(this.Flags | ToonFlags.AllUnknowns)).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field5).Build()); // Name var fieldKey6 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 2, 0); var field6 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey6).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.Name + "#" + this.HashCodeString).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field6).Build()); // Is it selected toon? var fieldKey7 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 3, 0); var field7 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey7).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetBoolValue(this.IsSelected).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field7).Build()); //AwayStatus - Available, Away, Busy var fieldKey10 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 5, 0); var field10 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey10).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue((uint)(this.AwayStatus)).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field10).Build()); // Program - FourCC "D3" var fieldKey8 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 9, 0); var field8 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey8).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetFourccValue("D3").Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field8).Build()); // Unknown int - maybe highest completed act? /raist var fieldKey9 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 10, 0); var field9 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey9).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(0).Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field9).Build()); //Unknown string = always "NICKTEMPNAME" -Egris var fieldKey11 = FieldKeyHelper.Create(FieldKeyHelper.Program.BNet, 3, 12, 0); var field11 = bnet.protocol.presence.Field.CreateBuilder().SetKey(fieldKey11).SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue("NICKTEMPNAME").Build()).Build(); operations.Add(bnet.protocol.presence.FieldOperation.CreateBuilder().SetField(field11).Build()); // Create a presence.ChannelState var state = bnet.protocol.presence.ChannelState.CreateBuilder().SetEntityId(this.BnetEntityID).AddRangeFieldOperation(operations).Build(); // Embed in channel.ChannelState var channelState = bnet.protocol.channel.ChannelState.CreateBuilder().SetExtension(bnet.protocol.presence.ChannelState.Presence, state); // Put in AddNotification message var builder = bnet.protocol.channel.AddNotification.CreateBuilder().SetChannelState(channelState); // Make the RPC call client.MakeTargetedRPC(this, () => bnet.protocol.channel.ChannelSubscriber.CreateStub(client).NotifyAdd(null, builder.Build(), callback => { })); }