private void HelloGameMessageHandler(DofusClient client, HelloGameMessage message) { client.Logger.Log("Connecté au serveur de jeu."); var atm = new AuthenticationTicketMessage("fr", client.Account.Ticket); client.Send(atm); }
public static void HandleAuthenticationTicketMessage(WorldClient client, AuthenticationTicketMessage message) { if (!IPCAccessor.Instance.IsConnected) { client.Send(new AuthenticationTicketRefusedMessage()); client.DisconnectLater(1000); } else { var reader = new BigEndianReader(Encoding.ASCII.GetBytes(message.ticket)); var count = reader.ReadByte(); var ticket = reader.ReadUTFBytes(count); ApproachHandler.logger.Debug("Client request ticket {0}", ticket); IPCAccessor.Instance.SendRequest <AccountAnswerMessage>(new AccountRequestMessage { Ticket = ticket }, delegate(AccountAnswerMessage msg) { ServerBase <WorldServer> .Instance.IOTaskPool.AddMessage(delegate { ApproachHandler.OnAccountReceived(msg, client); }); }, delegate(IPCErrorMessage error) { client.Disconnect(); }); } }
private void HelloGameMessageHandler(DofusClient Client, HelloGameMessage Message) { Client.Logger.Log("Connecté au serveur de jeu."); AuthenticationTicketMessage ATM = new AuthenticationTicketMessage("fr", Client.Account.Ticket); Client.Send(ATM); }
public static void HandleAuthenticationTicketMessage(GameClient client, AuthenticationTicketMessage message) { if (message.ticket != string.Empty) { AccountRecord account = AccountRecord.ReturnAccountWithTicket(message.ticket); if (account != null) { client.Account = account; if (GameServer.Clients.Count(x => x.Account.Login == account.Login) > 1) { GameServer.Clients.First(x => x.Account.Login == account.Login).Disconnect(); } client.Account.Characters = CharacterRecord.ReturnCharacters(account.Id); client.Send(new AuthenticationTicketAcceptedMessage()); BasicHandler.SendBasicTimeMessage(client); } else { client.Send(new AuthenticationTicketRefusedMessage()); } } else { client.Send(new AuthenticationTicketRefusedMessage()); } }
public async void AuthenticationTicketMessageFrame(Client client, AuthenticationTicketMessage authenticationTicketMessage) { //verif du compte via IPC Account account = null; //HttpResponseMessage response = await clientweb.GetAsync("http://localhost:3000/ticket/get?secure_key=secret_key&ticket=" + authenticationTicketMessage.ticket); HttpResponseMessage response = await clientweb.GetAsync("http://localhost:3000/ticket/get?secure_key=secret_key&ticket=" + authenticationTicketMessage.ticket); if (response.IsSuccessStatusCode) { var account_json = await response.Content.ReadAsStringAsync(); account = JsonConvert.DeserializeObject <Account>(account_json); } //var account = await Container.Instance().Resolve<IAuthenticationManager>().GetAccountByTicket(authenticationTicketMessage.ticket); if (account == null) { client.Send(new AuthenticationTicketRefusedMessage()); return; //while (account == null) //{ // account = await Container.Instance().Resolve<IAuthenticationManager>().GetAccountByTicket(authenticationTicketMessage.ticket); //} } client.Account = account; this._logger.Info($"'{client.Account.Login}' switched to world with Ticket={authenticationTicketMessage.ticket}"); client.Send(new AuthenticationTicketAcceptedMessage()); client.Send(new BasicTimeMessage(1606023934, 60));// time which yet it client.Send(new ServerSettingsMessage("fr", 0, 0)); client.Send(new ServerOptionalFeaturesMessage(new int[] { 1, 2, 3, 5 })); client.Send(new ServerSessionConstantsMessage(new ServerSessionConstantInteger[] { new ServerSessionConstantInteger(1, 1500000), new ServerSessionConstantInteger(2, 7200000), new ServerSessionConstantInteger(3, 30), new ServerSessionConstantInteger(4, 86400000), new ServerSessionConstantInteger(5, 60000) })); client.Send(new AccountCapabilitiesMessage(client.Account.Id, true, 32767, 32767, 0, new int[] {}, new object())); client.Send(new TrustStatusMessage(true)); client.Language = authenticationTicketMessage.lang; }
private void HandleAuthenticationTicketMessage(ConnectionMITM client, AuthenticationTicketMessage message) { if (!m_tickets.ContainsKey(message.ticket)) { throw new Exception(string.Format("Ticket {0} not registered", message.ticket)); } var tuple = m_tickets[message.ticket]; m_tickets.Remove(message.ticket); client.Bot = tuple.Item1; client.Bot.ChangeConnection(client); client.Bot.ConnectionType = ClientConnectionType.GameConnection; client.Bot.CancelAllMessages(); // avoid to handle message from the auth client. client.Bot.Start(); ((NetworkMessageDispatcher)client.Bot.Dispatcher).Client = client; ((NetworkMessageDispatcher)client.Bot.Dispatcher).Server = client.Server; try { client.BindToServer(tuple.Item2.address, tuple.Item2.port); } catch (Exception) { logger.Error("Cannot connect to {0}:{1}.", tuple.Item2.address, tuple.Item2.port); client.Bot.Stop(); return; } logger.Debug("Bot retrieved with ticket {0}", message.ticket); }
public void AuthenticationTicketMessageFrame(Client client, AuthenticationTicketMessage authenticationTicketMessage) { //verif du compte via IPC client.Send(new AuthenticationTicketAcceptedMessage()); client.Send(new AccountCapabilitiesMessage(141748286, true, 32767, 32767, 0, new int[] {}, new object())); client.Send(new TrustStatusMessage(true)); }
public static void OnAuthenticationTicketMessage(INetworkClient client, AuthenticationTicketMessage im) { client.Send(new AuthenticationTicketAcceptedMessage()); var accountId = client.GetEntity().GetComponent <AccountComponent>().AccountId; client.Send(new AccountCapabilitiesMessage(accountId)); }
public static void HelloGameMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { if (!account.IsMITM) { AuthenticationTicketMessage authenticationTicketMessage = new AuthenticationTicketMessage(GameConstants.Lang, account.Ticket); account.SocketManager.Send(authenticationTicketMessage); } }
public static void HandleAuthentificationTicket(AuthenticationTicketMessage message, WorldClient client) { var msg = (AuthenticationTicketMessage)message; var reader = new BigEndianReader(Encoding.ASCII.GetBytes(msg.ticket)); var count = reader.ReadByte(); var ticket = reader.ReadUTFBytes(count); client.Account = ServersManager.GetAccount(ticket); client.Characters = CharacterRecord.GetAccountCharacters(client.Account.Id); client.Send(new AuthenticationTicketAcceptedMessage()); client.Send(new AccountCapabilitiesMessage(true, true, client.Account.Id, BreedRecord.AvailableBreedsFlags, BreedRecord.AvailableBreedsFlags, 1)); client.Send(new TrustStatusMessage(true, true)); client.Send(new ServerOptionalFeaturesMessage(new sbyte[] { 1, 2, 3, 4, 5, 6 })); }
public static void HandleAuthenticationTicket(BigEndianReader reader, WorldClient client, WorldServer server) { AuthenticationTicketMessage message = new AuthenticationTicketMessage(); message.Unpack(reader); Account account = AccountManager.GetAccountByTicket(message.ticket); if (account == null) { client.Send(new AuthenticationTicketRefusedMessage()); } client.Ticket = message.ticket; client.account = account; client.Send(new AuthenticationTicketAcceptedMessage()); }
public static void HandleAuthentificationTicketMessage(AuthenticationTicketMessage message, WorldClient client) { lock (m_locker) { var reader = new BigEndianReader(Encoding.ASCII.GetBytes(message.ticket)); var count = reader.ReadByte(); var ticket = reader.ReadUTFBytes(count); MessagePool.SendRequest <AccountMessage>(TransitionServerManager.Instance.AuthServer, new AccountRequestMessage { Ticket = ticket }, delegate(AccountMessage msg) { OnAccountReceived(client, msg); }, delegate() { OnAccountReceptionError(client); }); } }
public static void HelloGameMessageTreatment(Message message, byte[] packetDatas, AccountUC account) { if (!account.IsMITM) { AuthenticationTicketMessage authenticationTicketMessage = new AuthenticationTicketMessage(GameConstants.Lang, account.Ticket); using (BigEndianWriter writer = new BigEndianWriter()) { authenticationTicketMessage.Serialize(writer); MessagePackaging messagePackaging = new MessagePackaging(writer); messagePackaging.Pack((int)authenticationTicketMessage.ProtocolID); account.SocketManager.Send(messagePackaging.Writer.Content); } } }
public static void HandleAuthenticationTicketMessage(Bot bot, AuthenticationTicketMessage message) { if (m_languageFound) { return; } Languages lang; if (!m_langsShortcuts.TryGetValue(message.lang, out lang)) { return; } Host.ChangeLanguage(lang); m_languageFound = true; }
public static void HandleAuthenticationTicketMessage(WorldClient client, AuthenticationTicketMessage message) { if (!IPCAccessor.Instance.IsConnected) { client.Send(new AuthenticationTicketRefusedMessage()); client.DisconnectLater(1000); return; } message.ticket = Encoding.ASCII.GetString(message.ticket.Split(',').Select(x => (byte)int.Parse(x)).ToArray()); logger.Debug("Client request ticket {0}", message.ticket); IPCAccessor.Instance.SendRequest <AccountAnswerMessage>(new AccountRequestMessage { Ticket = message.ticket }, msg => WorldServer.Instance.IOTaskPool.AddMessage(() => OnAccountReceived(msg, client)), error => client.Disconnect()); }
public void AuthenticationTicketMessageFrame(WorldClient client, AuthenticationTicketMessage authenticationTicketMessage) { string ticket = AuthenticationUtils.DecodeTicket(authenticationTicketMessage.ticket); //client.SendPacket(new AuthenticationTicketAcceptedMessage()); var account = AccountRepository.Instance.GetAccountByTicket(ticket); if (account == null) { client.SendPacket(new AuthenticationTicketRefusedMessage()); return; } client.Account = account; Console.WriteLine("'{0}' switched to world with Ticket={1}", client.Account.Login, ticket); client.SendPacket(new AuthenticationTicketAcceptedMessage()); client.SendPacket(new TrustStatusMessage(true, false)); }
private void OnClientDataReceived(object sender, SimpleClient.DataReceivedEventArgs e) { BigEndianReader bigEndianReader = new BigEndianReader(e.Data.Data); NetworkMessage msg = MessageReceiver.BuildMessage((uint)e.Data.MessageId.Value, (IDataReader)bigEndianReader); if (msg == null) { this.Send(e.Data, NetworkDestinationEnum.Server); } else { if (this.Game) { if (msg.MessageId == 110U) { AuthenticationTicketMessage authenticationTicketMessage = (AuthenticationTicketMessage)msg; TicketEntry ticket = TicketsManager.GetTicket(); if (ticket.Address == "" || ticket.Port == (ushort)0) { return; } this.Ticket = authenticationTicketMessage.Ticket; this.Lang = authenticationTicketMessage.Lang; this.Server.Start(ticket.Address, (short)ticket.Port); this.Instance = ticket.Instance; this.Window = ticket.Window; this.Window.UpdateClient(this); } else { this.Send(e.Data, NetworkDestinationEnum.Server); } } else { this.Send(e.Data, NetworkDestinationEnum.Server); } this.OnMessageSent(new SyncClient.MessageSentEventArgs(msg, e.Data)); } }
public void OnReceivedPacket(object source, PacketEventArg e) { ServerPacketEnum PacketType = (ServerPacketEnum)e.Packet.MessageID; switch (PacketType) { case ServerPacketEnum.ProtocolRequired: break; case ServerPacketEnum.CredentialsAcknowledgementMessage: break; case ServerPacketEnum.BasicAckMessage: break; case ServerPacketEnum.TextInformationMessage: TextInformationMessage text = (TextInformationMessage)e.Packet; Log(LogMessageType.Arena, ((TextInformationTypeEnum)text.MsgType).ToString() + "ID = " + text.MsgId); for (int i = 0; i < text.Parameters.Count; i++) { string t = text.Parameters[i]; Log(LogMessageType.Arena, "Parameter[" + i + "] " + t); } break; case ServerPacketEnum.HelloGameMessage: Log(LogMessageType.Info, "Connecté au serveur de jeu."); HelloGameMessage helloGame = (HelloGameMessage)e.Packet; AuthenticationTicketMessage ATM = new AuthenticationTicketMessage("fr", _ticket.ToString()); _GameSocket.Send(ATM); break; case ServerPacketEnum.RawDataMessage: List <int> tt = new List <int>(); for (int i = 0; i <= 255; i++) { Random random = new Random(); int test = random.Next(-127, 127); } CheckIntegrityMessage rawData = new CheckIntegrityMessage(tt); _GameSocket.Send(rawData); break; case ServerPacketEnum.HelloConnectMessage: Log(LogMessageType.Info, "Connecté au serveur d'authentification."); HelloConnectMessage helloConnectMessage = (HelloConnectMessage)e.Packet; sbyte[] credentials = RSA.RSAKey.Encrypt(helloConnectMessage.key, accountNameTextField.Text, accountPasswordTextField.Text, helloConnectMessage.salt); VersionExtended version = new VersionExtended(2, 41, 1, 120264, 1, (sbyte)BuildTypeEnum.RELEASE, 1, 1); IdentificationMessage idm = new IdentificationMessage(autoConnectCheckBox.Checked, false, false, version, "fr", credentials, 0, 0, new ushort[0]); Log(LogMessageType.Info, "Envois des informations d'identification..."); _ServerSocket.Send(idm); break; case ServerPacketEnum.LoginQueueStatusMessage: LoginQueueStatusMessage loginQueueStatusMessage = (LoginQueueStatusMessage)e.Packet; if (loginQueueStatusMessage.Position != 0 && loginQueueStatusMessage.Total != 0) { Log(LogMessageType.Info, "Vous êtes en position " + loginQueueStatusMessage.Position + " sur " + loginQueueStatusMessage.Total + " dans la file d'attente."); } break; case ServerPacketEnum.CurrentMapMessage: CurrentMapMessage currentMap = (CurrentMapMessage)e.Packet; _GameSocket.Send(new MapInformationsRequestMessage(currentMap.MapId)); break; case ServerPacketEnum.QueueStatusMessage: QueueStatusMessage queueStatusMessage = (QueueStatusMessage)e.Packet; if (queueStatusMessage.Position != 0 && queueStatusMessage.Total != 0) { Log(LogMessageType.Info, "Vous êtes en position " + queueStatusMessage.Position + " sur " + queueStatusMessage.Total + " dans la file d'attente."); } break; case ServerPacketEnum.IdentificationFailedMessage: IdentificationFailedMessage msg = (IdentificationFailedMessage)e.Packet; Log(LogMessageType.Public, "Identification échouée !"); Log(LogMessageType.Public, ((IdentificationFailureReasonEnum)msg.Reason).ToString()); DisconnectHandler(); break; case ServerPacketEnum.IdentificationSuccessMessage: break; case ServerPacketEnum.ServerListMessage: ServersListMessage servers = (ServersListMessage)e.Packet; foreach (GameServerInformations i in servers.Servers) { if (i.CharactersCount > 0 && i.IsSelectable && (ServerStatusEnum)i.Status == ServerStatusEnum.ONLINE) { _ServerSocket.Send(new ServerSelectionMessage(i.ObjectID)); break; } } break; case ServerPacketEnum.SelectedServerDataMessage: SelectedServerDataMessage selected = (SelectedServerDataMessage)e.Packet; Log(LogMessageType.Info, "Connexion au serveur " + (ServerNameEnum)selected.ServerId + "..."); _ticket = AES.AES.TicketTrans(selected.Ticket); _GameSocket = new DofusBotSocket(_deserializer, new IPEndPoint(IPAddress.Parse(selected.Address), selected.Port)); Log(LogMessageType.Info, "Connexion en cours <" + selected.Address + ":" + selected.Port + ">"); _GameSocket.ConnectEndListen(); _ServerSocket.CloseSocket(); _ServerSocket = null; break; case ServerPacketEnum.SelectedServerDataExtendedMessage: SelectedServerDataExtendedMessage selectedExtended = (SelectedServerDataExtendedMessage)e.Packet; Log(LogMessageType.Info, "Connecté au serveur : " + (ServerNameEnum)selectedExtended.ServerId + "..."); _ticket = AES.AES.TicketTrans(selectedExtended.Ticket); _GameSocket = new DofusBotSocket(_deserializer, new IPEndPoint(IPAddress.Parse(selectedExtended.Address), selectedExtended.Port)); Log(LogMessageType.Info, "Connexion en cours <" + selectedExtended.Address + ":" + selectedExtended.Port + ">"); _GameSocket.ConnectEndListen(); _ServerSocket.CloseSocket(); _ServerSocket = null; break; case ServerPacketEnum.AuthenticationTicketAcceptedMessage: AuthenticationTicketAcceptedMessage accepted = (AuthenticationTicketAcceptedMessage)e.Packet; Thread.Sleep(500); _GameSocket.Send(new CharactersListRequestMessage()); break; case ServerPacketEnum.AuthenticationTicketRefusedMessage: break; case ServerPacketEnum.GameContextCreateMessage: break; case ServerPacketEnum.SetCharacterRestrictionsMessage: break; case ServerPacketEnum.BasicNoOperationMessage: break; case ServerPacketEnum.NotificationListMessage: break; case ServerPacketEnum.CharacterSelectedSuccessMessage: break; case ServerPacketEnum.InventoryContentMessage: InventoryContentMessage inventory = (InventoryContentMessage)e.Packet; Invoke((MethodInvoker) delegate { kamasLabel.Text = inventory.Kamas.ToString(); }); break; case ServerPacketEnum.SetUpdateMessage: break; case ServerPacketEnum.ShortcutBarContentMessage: break; case ServerPacketEnum.RoomAvailableUpdateMessage: break; case ServerPacketEnum.HavenBagPackListMessage: break; case ServerPacketEnum.EmoteListMessage: break; case ServerPacketEnum.JobDescriptionMessage: JobDescriptionMessage jobs = (JobDescriptionMessage)e.Packet; foreach (JobDescription j in jobs.JobsDescription) { foreach (SkillActionDescription s in j.Skills) { //Log(LogMessageType.Noob, "Métier: " + j.JobId + " | Skill: " + s.SkillId); } } break; case ServerPacketEnum.JobExperienceMultiUpdateMessage: break; case ServerPacketEnum.JobCrafterDirectorySettingsMessage: break; case ServerPacketEnum.AlignmentRankUpdateMessage: break; case ServerPacketEnum.ServerExperienceModificatorMessage: break; case ServerPacketEnum.DareCreatedListMessage: break; case ServerPacketEnum.AlmanachCalendarDateMessage: break; case ServerPacketEnum.CharacterCapabilitiesMessage: break; case ServerPacketEnum.GameRolePlayArenaUpdatePlayerInfosAllQueuesMessage: break; case ServerPacketEnum.AchievementListMessage: break; case ServerPacketEnum.BasicLatencyStatsRequestMessage: break; case ServerPacketEnum.GameContextRemoveElementMessage: break; case ServerPacketEnum.GameMapChangeOrientationMessage: break; case ServerPacketEnum.GameRolePlayShowActorMessage: break; case ServerPacketEnum.SpouseStatusMessage: break; case ServerPacketEnum.SequenceNumberRequestMessage: break; case ServerPacketEnum.GuildMemberWarnOnConnectionStateMessage: break; case ServerPacketEnum.WarnOnPermaDeathStateMessage: break; case ServerPacketEnum.FriendGuildWarnOnAchievementCompleteStateMessage: break; case ServerPacketEnum.FriendWarnOnLevelGainStateMessage: break; case ServerPacketEnum.FriendWarnOnConnectionStateMessage: break; case ServerPacketEnum.BasicTimeMessage: break; case ServerPacketEnum.ServerSettingsMessage: break; case ServerPacketEnum.ServerOptionalFeaturesMessage: break; case ServerPacketEnum.ServerSessionConstantsMessage: break; case ServerPacketEnum.StatedElementUpdatedMessage: break; case ServerPacketEnum.InteractiveElementUpdatedMessage: break; case ServerPacketEnum.InteractiveUsedMessage: break; case ServerPacketEnum.AccountCapabilitiesMessage: break; case ServerPacketEnum.TrustStatusMessage: break; case ServerPacketEnum.PrismsListMessage: break; case ServerPacketEnum.CharacterExperienceGainMessage: break; case ServerPacketEnum.IdolListMessage: break; case ServerPacketEnum.SpellListMessage: break; break; case ServerPacketEnum.EnabledChannelsMessage: break; case ServerPacketEnum.GameMapMovementMessage: break; case ServerPacketEnum.DareSubscribedListMessage: break; case ServerPacketEnum.UpdateMapPlayersAgressableStatusMessage: break; case ServerPacketEnum.CharacterStatsListMessage: break; case ServerPacketEnum.MapComplementaryInformationsDataMessage: MapComplementaryInformationsDataMessage mapInfos = (MapComplementaryInformationsDataMessage)e.Packet; Invoke((MethodInvoker) delegate { currentMapIdLabel.Text = mapInfos.MapId.ToString(); }); break; case ServerPacketEnum.LifePointsRegenBeginMessage: break; case ServerPacketEnum.GameContextDestroyMessage: break; case ServerPacketEnum.IgnoredListMessage: break; case ServerPacketEnum.FriendsListMessage: FriendsListMessage friendsList = (FriendsListMessage)e.Packet; foreach (FriendInformations f in friendsList.FriendsList) { Log(LogMessageType.Noob, "Amis: " + f.AccountName + " | Dernière Connexion: " + DateExtensions.UnixTimestampToDateTime(f.LastConnection).ToLongDateString() + " | Points de Succès: " + f.AchievementPoints); } break; case ServerPacketEnum.AccountHouseMessage: break; case ServerPacketEnum.StartupActionsListMessage: break; case ServerPacketEnum.ChatCommunityChannelCommunityMessage: break; case ServerPacketEnum.DareRewardsListMessage: break; case ServerPacketEnum.DareWonListMessage: break; case ServerPacketEnum.MailStatusMessage: break; case ServerPacketEnum.ChannelEnablingChangeMessage: break; case ServerPacketEnum.InventoryWeightMessage: InventoryWeightMessage IWM = (InventoryWeightMessage)e.Packet; Invoke((MethodInvoker) delegate { PodsProgressValue = IWM.Weight; PodsProgressMaximum = IWM.WeightMax; PodsProgress.Refresh(); }); break; case ServerPacketEnum.CharacterLoadingCompleteMessage: _GameSocket.Send(new FriendsGetListMessage()); _GameSocket.Send(new IgnoredGetListMessage()); _GameSocket.Send(new SpouseGetInformationsMessage()); _GameSocket.Send(new ClientKeyMessage(FlashKeyGenerator.GetRandomFlashKey(accountNameTextField.Text))); _GameSocket.Send(new GameContextCreateRequestMessage()); _GameSocket.Send(new ChannelEnablingMessage(7, false)); break; case ServerPacketEnum.CharactersListMessage: CharactersListMessage charactersList = (CharactersListMessage)e.Packet; List <CharacterBaseInformations> characters = charactersList.Characters; for (int i = 0; i < characters.Count; i++) { CharacterBaseInformations c = characters[i]; Log(LogMessageType.Info, "Connexion sur le personnage " + c.Name); _GameSocket.Send(new CharacterSelectionMessage((ulong)c.ObjectID)); break; } break; default: Log(LogMessageType.Admin, "Packet: [" + (ServerPacketEnum)e.Packet.MessageID + "] is not handled."); break; } }
private static void HandleAuthenticationTicketMessage(Bot bot, AuthenticationTicketMessage message) { // theorically not received message.BlockNetworkSend(); }