// TODO: Verify ClientRequest values.
static async Task HandleRealmListTicketRequest(ClientRequest clientRequest, BnetSession session)
{
var paramIdentityValue = clientRequest.GetVariant("Param_Identity")?.BlobValue.ToStringUtf8();
var paramClientInfoValue = clientRequest.GetVariant("Param_ClientInfo")?.BlobValue.ToStringUtf8();
if (paramIdentityValue != null && paramClientInfoValue != null)
{
var realmListTicketIdentity = CreateObject<RealmListTicketIdentity>(paramIdentityValue, true);
var realmListTicketClientInformation = CreateObject<RealmListTicketClientInformation>(paramClientInfoValue, true);
session.GameAccount = session.Account.GameAccounts.SingleOrDefault(ga => ga.Id == realmListTicketIdentity.GameAccountId);
if (session.GameAccount != null)
{
session.RealmListSecret = realmListTicketClientInformation.Info.Secret.Select(x => Convert.ToByte(x)).ToArray();
session.RealmListTicket = new byte[0].GenerateRandomKey(32);
var realmListTicketResponse = new ClientResponse();
realmListTicketResponse.Attribute.Add(new Bgs.Protocol.Attribute
{
Name = "Param_RealmListTicket",
Value = new Variant
{
BlobValue = ByteString.CopyFrom(session.RealmListTicket)
}
});
await session.Send(realmListTicketResponse);
}
}
else
session.Dispose();
}