Skip to content

Commit

Permalink
feat(skymp5-client): support domain resolving (#2319)
Browse files Browse the repository at this point in the history
  • Loading branch information
nic11 authored Feb 7, 2025
1 parent e3d9ac6 commit 9ec9277
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Game, Utility, HttpClient, printConsole, createText } from "skyrimPlatform";
import { getServerIp, getServerUiPort } from "./skympClient";
import { getScreenResolution } from "../../view/formView";
import { ClientListener, CombinedController, Sp } from "./clientListener";
import { Mod, ServerManifest } from "../messages_http/serverManifest";
Expand Down Expand Up @@ -107,8 +106,6 @@ export class LoadOrderVerificationService extends ClientListener {
}

private getServerMods(retriesLeft: number): Promise<Mod[]> {
const targetIp = getServerIp();
const uiPort = getServerUiPort();
// TODO: unhardcode master address
// TODO: unhardcode serverId (sweetpie)
let addr = "https://gateway.skymp.net";
Expand Down
30 changes: 17 additions & 13 deletions skymp5-client/src/services/services/skympClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,17 @@ import { ConnectionMessage } from '../events/connectionMessage';
import { CreateActorMessage } from '../messages/createActorMessage';
import { AuthAttemptEvent } from '../events/authAttemptEvent';
import { logTrace } from '../../logging';
import { resolve4 } from 'dns';
import { promisify } from 'util';

const resolve4Promise = promisify(resolve4);

printConsole('Hello Multiplayer!');
printConsole('settings:', settings['skymp5-client']);

const targetIp = settings['skymp5-client']['server-ip'] as string;
const targetHost = settings['skymp5-client']['server-host'] as string;
const targetPort = settings['skymp5-client']['server-port'] as number;

export const getServerIp = () => {
return targetIp;
};

export const getServerUiPort = () => {
return targetPort === 7777 ? 3000 : (targetPort as number) + 1;
};

export class SkympClient extends ClientListener {
constructor(private sp: Sp, private controller: CombinedController) {
super();
Expand Down Expand Up @@ -94,15 +90,23 @@ export class SkympClient extends ClientListener {
this.sp.printConsole('SkympClient ctor');
}

private establishConnectionConditional() {
private async resolveHost(host: string) {
if (!host.match(/[a-zA-Z]/g)) {
return host;
}
const addrs = await resolve4Promise(host);
return addrs[Math.floor(Math.random() * addrs.length)];
}

private async establishConnectionConditional() {
const isConnected = this.controller.lookupListener(networking.NetworkingService).isConnected();

if (!isConnected || storage.targetIp !== targetIp || storage.targetPort !== targetPort) {
storage.targetIp = targetIp;
if (!isConnected) {
storage.targetIp = await this.resolveHost(targetHost);
storage.targetPort = targetPort;

logTrace(this, `Connecting to`, storage.targetIp + ':' + storage.targetPort);
this.controller.lookupListener(networking.NetworkingService).connect(targetIp, targetPort);
this.controller.lookupListener(networking.NetworkingService).connect(storage.targetIp as string, targetPort);
} else {
logTrace(this, 'Reconnect is not required');
}
Expand Down

0 comments on commit 9ec9277

Please sign in to comment.