adjusted null if no hash
This commit is contained in:
parent
b20b4abb9e
commit
64847cd465
@ -34,9 +34,9 @@ export class Room {
|
|||||||
this._search = new URLSearchParams(url.search);
|
this._search = new URLSearchParams(url.search);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getIdFromIdentifier(identifier: string, baseUrl: string, currentInstance: string): {roomId: string, hash: string} {
|
public static getIdFromIdentifier(identifier: string, baseUrl: string, currentInstance: string): { roomId: string, hash: string | null } {
|
||||||
let roomId = '';
|
let roomId = '';
|
||||||
let hash = '';
|
let hash = null;
|
||||||
if (!identifier.startsWith('/_/') && !identifier.startsWith('/@/')) { //relative file link
|
if (!identifier.startsWith('/_/') && !identifier.startsWith('/@/')) { //relative file link
|
||||||
//Relative identifier can be deep enough to rewrite the base domain, so we cannot use the variable 'baseUrl' as the actual base url for the URL objects.
|
//Relative identifier can be deep enough to rewrite the base domain, so we cannot use the variable 'baseUrl' as the actual base url for the URL objects.
|
||||||
//We instead use 'workadventure' as a dummy base value.
|
//We instead use 'workadventure' as a dummy base value.
|
||||||
@ -126,8 +126,7 @@ export class Room {
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
public isDisconnected(): boolean
|
public isDisconnected(): boolean {
|
||||||
{
|
|
||||||
const alone = this._search.get('alone');
|
const alone = this._search.get('alone');
|
||||||
if (alone && alone !== '0' && alone.toLowerCase() !== 'false') {
|
if (alone && alone !== '0' && alone.toLowerCase() !== 'false') {
|
||||||
return true;
|
return true;
|
||||||
|
@ -909,20 +909,17 @@ ${escapedMessage}
|
|||||||
this.userInputManager.disableControls();
|
this.userInputManager.disableControls();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this.iframeSubscriptionList.push(iframeListener.playSoundStream.subscribe((playSoundEvent)=>
|
this.iframeSubscriptionList.push(iframeListener.playSoundStream.subscribe((playSoundEvent) => {
|
||||||
{
|
|
||||||
const url = new URL(playSoundEvent.url, this.MapUrlFile);
|
const url = new URL(playSoundEvent.url, this.MapUrlFile);
|
||||||
soundManager.playSound(this.load, this.sound, url.toString(), playSoundEvent.config);
|
soundManager.playSound(this.load, this.sound, url.toString(), playSoundEvent.config);
|
||||||
}))
|
}))
|
||||||
|
|
||||||
this.iframeSubscriptionList.push(iframeListener.stopSoundStream.subscribe((stopSoundEvent)=>
|
this.iframeSubscriptionList.push(iframeListener.stopSoundStream.subscribe((stopSoundEvent) => {
|
||||||
{
|
|
||||||
const url = new URL(stopSoundEvent.url, this.MapUrlFile);
|
const url = new URL(stopSoundEvent.url, this.MapUrlFile);
|
||||||
soundManager.stopSound(this.sound, url.toString());
|
soundManager.stopSound(this.sound, url.toString());
|
||||||
}))
|
}))
|
||||||
|
|
||||||
this.iframeSubscriptionList.push(iframeListener.loadSoundStream.subscribe((loadSoundEvent)=>
|
this.iframeSubscriptionList.push(iframeListener.loadSoundStream.subscribe((loadSoundEvent) => {
|
||||||
{
|
|
||||||
const url = new URL(loadSoundEvent.url, this.MapUrlFile);
|
const url = new URL(loadSoundEvent.url, this.MapUrlFile);
|
||||||
soundManager.loadSound(this.load, this.sound, url.toString());
|
soundManager.loadSound(this.load, this.sound, url.toString());
|
||||||
}))
|
}))
|
||||||
@ -959,7 +956,9 @@ ${escapedMessage}
|
|||||||
this.mapTransitioning = true;
|
this.mapTransitioning = true;
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier(exitKey, this.MapUrlFile, this.instance);
|
const { roomId, hash } = Room.getIdFromIdentifier(exitKey, this.MapUrlFile, this.instance);
|
||||||
if (!roomId) throw new Error('Could not find the room from its exit key: ' + exitKey);
|
if (!roomId) throw new Error('Could not find the room from its exit key: ' + exitKey);
|
||||||
|
if (hash) {
|
||||||
urlManager.pushStartLayerNameToUrl(hash);
|
urlManager.pushStartLayerNameToUrl(hash);
|
||||||
|
}
|
||||||
if (roomId !== this.scene.key) {
|
if (roomId !== this.scene.key) {
|
||||||
if (this.scene.get(roomId) === null) {
|
if (this.scene.get(roomId) === null) {
|
||||||
console.error("next room not loaded", exitKey);
|
console.error("next room not loaded", exitKey);
|
||||||
@ -1112,7 +1111,7 @@ ${escapedMessage}
|
|||||||
|
|
||||||
//todo: push that into the gameManager
|
//todo: push that into the gameManager
|
||||||
private loadNextGame(exitSceneIdentifier: string): Promise<void> {
|
private loadNextGame(exitSceneIdentifier: string): Promise<void> {
|
||||||
const {roomId, hash} = Room.getIdFromIdentifier(exitSceneIdentifier, this.MapUrlFile, this.instance);
|
const { roomId } = Room.getIdFromIdentifier(exitSceneIdentifier, this.MapUrlFile, this.instance);
|
||||||
const room = new Room(roomId);
|
const room = new Room(roomId);
|
||||||
return gameManager.loadMap(room, this.scene).catch(() => { });
|
return gameManager.loadMap(room, this.scene).catch(() => { });
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ describe("Room getIdFromIdentifier()", () => {
|
|||||||
it("should work with an absolute room id and no hash as parameter", () => {
|
it("should work with an absolute room id and no hash as parameter", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('/_/global/maps.workadventu.re/test2.json', '', '');
|
const { roomId, hash } = Room.getIdFromIdentifier('/_/global/maps.workadventu.re/test2.json', '', '');
|
||||||
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
it("should work with an absolute room id and a hash as parameters", () => {
|
it("should work with an absolute room id and a hash as parameters", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('/_/global/maps.workadventu.re/test2.json#start', '', '');
|
const { roomId, hash } = Room.getIdFromIdentifier('/_/global/maps.workadventu.re/test2.json#start', '', '');
|
||||||
@ -15,39 +15,39 @@ describe("Room getIdFromIdentifier()", () => {
|
|||||||
it("should work with an absolute room id, regardless of baseUrl or instance", () => {
|
it("should work with an absolute room id, regardless of baseUrl or instance", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('/_/global/maps.workadventu.re/test2.json', 'https://another.domain/_/global/test.json', 'lol');
|
const { roomId, hash } = Room.getIdFromIdentifier('/_/global/maps.workadventu.re/test2.json', 'https://another.domain/_/global/test.json', 'lol');
|
||||||
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
it("should work with a relative file link and no hash as parameters", () => {
|
it("should work with a relative file link and no hash as parameters", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('./test2.json', 'https://maps.workadventu.re/test.json', 'global');
|
const { roomId, hash } = Room.getIdFromIdentifier('./test2.json', 'https://maps.workadventu.re/test.json', 'global');
|
||||||
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
it("should work with a relative file link with no dot", () => {
|
it("should work with a relative file link with no dot", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('test2.json', 'https://maps.workadventu.re/test.json', 'global');
|
const { roomId, hash } = Room.getIdFromIdentifier('test2.json', 'https://maps.workadventu.re/test.json', 'global');
|
||||||
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
expect(roomId).toEqual('_/global/maps.workadventu.re/test2.json');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
it("should work with a relative file link two levels deep", () => {
|
it("should work with a relative file link two levels deep", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('../floor1/Floor1.json', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
const { roomId, hash } = Room.getIdFromIdentifier('../floor1/Floor1.json', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
||||||
expect(roomId).toEqual('_/global/maps.workadventu.re/floor1/Floor1.json');
|
expect(roomId).toEqual('_/global/maps.workadventu.re/floor1/Floor1.json');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
it("should work with a relative file link that rewrite the map domain", () => {
|
it("should work with a relative file link that rewrite the map domain", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('../../maps.workadventure.localhost/Floor1/floor1.json', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
const { roomId, hash } = Room.getIdFromIdentifier('../../maps.workadventure.localhost/Floor1/floor1.json', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
||||||
expect(roomId).toEqual('_/global/maps.workadventure.localhost/Floor1/floor1.json');
|
expect(roomId).toEqual('_/global/maps.workadventure.localhost/Floor1/floor1.json');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
it("should work with a relative file link that rewrite the map instance", () => {
|
it("should work with a relative file link that rewrite the map instance", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('../../../notglobal/maps.workadventu.re/Floor1/floor1.json', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
const { roomId, hash } = Room.getIdFromIdentifier('../../../notglobal/maps.workadventu.re/Floor1/floor1.json', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
||||||
expect(roomId).toEqual('_/notglobal/maps.workadventu.re/Floor1/floor1.json');
|
expect(roomId).toEqual('_/notglobal/maps.workadventu.re/Floor1/floor1.json');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
it("should work with a relative file link that change the map type", () => {
|
it("should work with a relative file link that change the map type", () => {
|
||||||
const { roomId, hash } = Room.getIdFromIdentifier('../../../../@/tcm/is/great', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
const { roomId, hash } = Room.getIdFromIdentifier('../../../../@/tcm/is/great', 'https://maps.workadventu.re/floor0/Floor0.json', 'global');
|
||||||
expect(roomId).toEqual('@/tcm/is/great');
|
expect(roomId).toEqual('@/tcm/is/great');
|
||||||
expect(hash).toEqual('');
|
expect(hash).toEqual(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should work with a relative file link and a hash as parameters", () => {
|
it("should work with a relative file link and a hash as parameters", () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user