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