Front federation (API and Jitsi)
This commit is contained in:
parent
1981e3102f
commit
9d66085623
@ -88,9 +88,9 @@ class ConnectionManager {
|
||||
this.localUser = new LocalUser('', 'test', []);
|
||||
}
|
||||
|
||||
public connectToRoomSocket(roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface, companion: string|null): Promise<OnConnectInterface> {
|
||||
public connectToRoomSocket(apiUrl: string, roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface, companion: string|null): Promise<OnConnectInterface> {
|
||||
return new Promise<OnConnectInterface>((resolve, reject) => {
|
||||
const connection = new RoomConnection(this.localUser.jwtToken, roomId, name, characterLayers, position, viewport, companion);
|
||||
const connection = new RoomConnection(apiUrl, this.localUser.jwtToken, roomId, name, characterLayers, position, viewport, companion);
|
||||
connection.onConnectError((error: object) => {
|
||||
console.log('An error occurred while connecting to socket server. Retrying');
|
||||
reject(error);
|
||||
@ -111,7 +111,7 @@ class ConnectionManager {
|
||||
this.reconnectingTimeout = setTimeout(() => {
|
||||
//todo: allow a way to break recursion?
|
||||
//todo: find a way to avoid recursive function. Otherwise, the call stack will grow indefinitely.
|
||||
this.connectToRoomSocket(roomId, name, characterLayers, position, viewport, companion).then((connection) => resolve(connection));
|
||||
this.connectToRoomSocket(apiUrl, roomId, name, characterLayers, position, viewport, companion).then((connection) => resolve(connection));
|
||||
}, 4000 + Math.floor(Math.random() * 2000) );
|
||||
});
|
||||
});
|
||||
|
@ -70,8 +70,8 @@ export class RoomConnection implements RoomConnection {
|
||||
* @param token A JWT token containing the UUID of the user
|
||||
* @param roomId The ID of the room in the form "_/[instance]/[map_url]" or "@/[org]/[event]/[map]"
|
||||
*/
|
||||
public constructor(token: string|null, roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface, companion: string|null) {
|
||||
let url = new URL(PUSHER_URL, window.location.toString()).toString();
|
||||
public constructor(apiUrl: string, token: string|null, roomId: string, name: string, characterLayers: string[], position: PositionInterface, viewport: ViewportInterface, companion: string|null) {
|
||||
let url = new URL(apiUrl, window.location.toString()).toString();
|
||||
url = url.replace('http://', 'ws://').replace('https://', 'wss://');
|
||||
if (!url.endsWith('/')) {
|
||||
url += '/';
|
||||
|
@ -13,8 +13,10 @@ import {hasMovedEventName, Player, requestEmoteEventName} from "../Player/Player
|
||||
import {
|
||||
DEBUG_MODE,
|
||||
JITSI_PRIVATE_MODE,
|
||||
JITSI_URL,
|
||||
MAX_PER_GROUP,
|
||||
POSITION_DELAY,
|
||||
PUSHER_URL
|
||||
} from "../../Enum/EnvironmentVariable";
|
||||
import type {
|
||||
ITiledMap,
|
||||
@ -134,6 +136,24 @@ interface DeleteGroupEventInterface {
|
||||
groupId: number
|
||||
}
|
||||
|
||||
interface MapProperty {
|
||||
name: string;
|
||||
type: string;
|
||||
value: string|number;
|
||||
}
|
||||
|
||||
// FIXME: See onMapLoad
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
function getMapProperty(mapData: any, name: string, type: string, dflt: string|undefined = undefined): any {
|
||||
if (!Array.isArray(mapData.properties)) {
|
||||
return dflt;
|
||||
}
|
||||
|
||||
const properties: MapProperty[] = mapData.properties;
|
||||
const prop = properties.find((prop: MapProperty) => prop.type === type && prop.name === name)
|
||||
return prop ? prop.value : dflt;
|
||||
}
|
||||
|
||||
const defaultStartLayerName = 'start';
|
||||
|
||||
export class GameScene extends DirtyScene implements CenterListener {
|
||||
@ -167,6 +187,7 @@ export class GameScene extends DirtyScene implements CenterListener {
|
||||
MapUrlFile: string;
|
||||
RoomId: string;
|
||||
instance: string;
|
||||
apiUrl: string = PUSHER_URL;
|
||||
|
||||
currentTick!: number;
|
||||
lastSentTick!: number; // The last tick at which a position was sent.
|
||||
@ -292,6 +313,9 @@ export class GameScene extends DirtyScene implements CenterListener {
|
||||
// FIXME: we need to put a "unknown" instead of a "any" and validate the structure of the JSON we are receiving.
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
private async onMapLoad(data: any): Promise<void> {
|
||||
this.apiUrl = getMapProperty(data.data, 'apiUrl', 'string', PUSHER_URL);
|
||||
console.info('apiUrl:', this.apiUrl);
|
||||
|
||||
// Triggered when the map is loaded
|
||||
// Load tiles attached to the map recursively
|
||||
this.mapFile = data.data;
|
||||
@ -539,6 +563,7 @@ export class GameScene extends DirtyScene implements CenterListener {
|
||||
const camera = this.cameras.main;
|
||||
|
||||
connectionManager.connectToRoomSocket(
|
||||
this.apiUrl,
|
||||
this.RoomId,
|
||||
this.playerName,
|
||||
this.characterLayers,
|
||||
@ -1583,7 +1608,7 @@ ${escapedMessage}
|
||||
const allProps = this.gameMap.getCurrentProperties();
|
||||
const jitsiConfig = this.safeParseJSONstring(allProps.get("jitsiConfig") as string|undefined, 'jitsiConfig');
|
||||
const jitsiInterfaceConfig = this.safeParseJSONstring(allProps.get("jitsiInterfaceConfig") as string|undefined, 'jitsiInterfaceConfig');
|
||||
const jitsiUrl = allProps.get("jitsiUrl") as string|undefined;
|
||||
const jitsiUrl = (allProps.get("jitsiUrl") as string|undefined) || getMapProperty(this.mapFile, 'jitsiUrl', 'string', JITSI_URL);
|
||||
|
||||
jitsiFactory.start(roomName, this.playerName, jwt, jitsiConfig, jitsiInterfaceConfig, jitsiUrl);
|
||||
this.connection?.setSilent(true);
|
||||
|
Loading…
Reference in New Issue
Block a user