public HeadlessClient(Legacy legacyApi, IConsole console, HeadlessStartConfig startConfig) { this.legacyApi = legacyApi; this.console = console; this.startConfig = startConfig; packetRegistry = PacketDefinitionRegistryFactory.CreateClassicClient(startConfig.ClientVersion); diagnosticProvider = new InfusionDiagnosticPushStreamProvider(LogConfig, console); serverDiagnosticPushStream = new CompositeDiagnosticPushStream(new ConsoleDiagnosticPushStream(packetLogger, "headless -> server", packetRegistry), new InfusionBinaryDiagnosticPushStream(DiagnosticStreamDirection.ClientToServer, diagnosticProvider.GetStream)); serverDiagnosticPullStream = new ConsoleDiagnosticPullStream(packetLogger, "server -> headless", packetRegistry); serverConnection = new ServerConnection(ServerConnectionStatus.Initial, serverDiagnosticPullStream, serverDiagnosticPushStream, packetRegistry, startConfig.Encryption); serverConnection.PacketReceived += ServerConnectionOnPacketReceived; ultimaServer = new UltimaServer(serverPacketHandler, SendToServer, packetRegistry); serverPacketHandler = new ServerPacketHandler(packetRegistry); clientPacketHandler = new ClientPacketHandler(packetRegistry); serverEndpoint = startConfig.ServerEndPoint; ultimaClient = new UltimaClient(clientPacketHandler, SendToClient); serverPacketHandler.RegisterFilter(FilterServerPacket); serverPacketHandler.Subscribe(PacketDefinitions.GameServerList, HandleGameServerList); serverPacketHandler.Subscribe(PacketDefinitions.CharactersStartingLocations, HandleCharactersStartingLocationsPacket); serverPacketHandler.Subscribe(PacketDefinitions.EnableLockedClientFeatures, HandleEnableLockedClientFeatures); clientPacketHandler.Subscribe(PacketDefinitions.LoginRequest, HandleLoginRequest); clientPacketHandler.Subscribe(PacketDefinitions.GameServerLoginRequest, HandleGameServerLoginRequest); clientPacketHandler.Subscribe(PacketDefinitions.SelectServerRequest, HandleSelectServerRequest); }
public static Task Start(IPEndPoint serverAddress, ushort localProxyPort = 33333) { serverPacketHandler.RegisterFilter(RedirectConnectToGameServer); serverPacketHandler.Subscribe(PacketDefinitions.SendSpeech, HandleSendSpeechPacket); serverPacketHandler.Subscribe(PacketDefinitions.SpeechMessage, HandleSpeechMessagePacket); serverPacketHandler.Subscribe(PacketDefinitions.ClilocMessage, HandleClilocMessage); serverPacketHandler.Subscribe(PacketDefinitions.ClilocMessageAffix, HandleClilocMessageAffix); serverEndpoint = serverAddress; return(Main(localProxyPort, packetRingBufferLogger)); }