Reconnecting also on socket error
This commit is contained in:
parent
f88f28db3f
commit
403ea223a8
@ -148,10 +148,6 @@ export class Connection implements Connection {
|
|||||||
reconnection: false // Reconnection is handled by the application itself
|
reconnection: false // Reconnection is handled by the application itself
|
||||||
});
|
});
|
||||||
|
|
||||||
this.socket.on(EventMessage.CONNECT_ERROR, () => {
|
|
||||||
console.error("Connection failed")
|
|
||||||
});
|
|
||||||
|
|
||||||
this.socket.on(EventMessage.MESSAGE_ERROR, (message: string) => {
|
this.socket.on(EventMessage.MESSAGE_ERROR, (message: string) => {
|
||||||
console.error(EventMessage.MESSAGE_ERROR, message);
|
console.error(EventMessage.MESSAGE_ERROR, message);
|
||||||
})
|
})
|
||||||
@ -160,17 +156,31 @@ export class Connection implements Connection {
|
|||||||
public static createConnection(name: string, characterSelected: string): Promise<Connection> {
|
public static createConnection(name: string, characterSelected: string): Promise<Connection> {
|
||||||
return Axios.post(`${API_URL}/login`, {name: name})
|
return Axios.post(`${API_URL}/login`, {name: name})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
|
||||||
|
return new Promise<Connection>((resolve, reject) => {
|
||||||
let connection = new Connection(gameManager, name, characterSelected, res.data.token);
|
let connection = new Connection(gameManager, name, characterSelected, res.data.token);
|
||||||
|
|
||||||
// FIXME: we should wait for the complete connexion here (i.e. the "connected" message from socket.io)!
|
connection.onConnectError((error: object) => {
|
||||||
// Otherwise, the connection MAY fail and we will never know!
|
console.log('An error occurred while connecting to socket server. Retrying');
|
||||||
return connection.connectSocketServer();
|
reject(error);
|
||||||
|
});
|
||||||
|
|
||||||
|
connection.socket.emit(EventMessage.SET_PLAYER_DETAILS, {
|
||||||
|
name: connection.name,
|
||||||
|
character: connection.character
|
||||||
|
} as SetPlayerDetailsMessage, (id: string) => {
|
||||||
|
connection.userId = id;
|
||||||
|
});
|
||||||
|
|
||||||
|
resolve(connection);
|
||||||
|
});
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
// Let's retry in 4-6 seconds
|
// Let's retry in 4-6 seconds
|
||||||
return new Promise<Connection>((resolve, reject) => {
|
return new Promise<Connection>((resolve, reject) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
resolve(Connection.createConnection(name, characterSelected));
|
Connection.createConnection(name, characterSelected).then((connection) => resolve(connection))
|
||||||
|
.catch((error) => reject(error));
|
||||||
}, 4000 + Math.floor(Math.random() * 2000) );
|
}, 4000 + Math.floor(Math.random() * 2000) );
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -185,40 +195,6 @@ export class Connection implements Connection {
|
|||||||
this.lastRoom = null;
|
this.lastRoom = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
connectSocketServer(): Promise<Connection>{
|
|
||||||
return new Promise<Connection>((resolve, reject) => {
|
|
||||||
this.socket.emit(EventMessage.SET_PLAYER_DETAILS, {
|
|
||||||
name: this.name,
|
|
||||||
character: this.character
|
|
||||||
} as SetPlayerDetailsMessage, (id: string) => {
|
|
||||||
this.userId = id;
|
|
||||||
});
|
|
||||||
|
|
||||||
//if try to reconnect with last position
|
|
||||||
/*if(this.lastRoom) {
|
|
||||||
//join the room
|
|
||||||
this.joinARoom(this.lastRoom,
|
|
||||||
this.lastPositionShared ? this.lastPositionShared.x : 0,
|
|
||||||
this.lastPositionShared ? this.lastPositionShared.y : 0,
|
|
||||||
this.lastPositionShared ? this.lastPositionShared.direction : PlayerAnimationNames.WalkDown,
|
|
||||||
this.lastPositionShared ? this.lastPositionShared.moving : false);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*if(this.lastPositionShared) {
|
|
||||||
|
|
||||||
//share your first position
|
|
||||||
this.sharePosition(
|
|
||||||
this.lastPositionShared ? this.lastPositionShared.x : 0,
|
|
||||||
this.lastPositionShared ? this.lastPositionShared.y : 0,
|
|
||||||
this.lastPositionShared.direction,
|
|
||||||
this.lastPositionShared.moving
|
|
||||||
);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
resolve(this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean): Promise<MessageUserPositionInterface[]> {
|
joinARoom(roomId: string, startX: number, startY: number, direction: string, moving: boolean): Promise<MessageUserPositionInterface[]> {
|
||||||
const point = new Point(startX, startY, direction, moving);
|
const point = new Point(startX, startY, direction, moving);
|
||||||
@ -262,6 +238,10 @@ export class Connection implements Connection {
|
|||||||
this.socket.on(EventMessage.GROUP_DELETE, callback)
|
this.socket.on(EventMessage.GROUP_DELETE, callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public onConnectError(callback: (error: object) => void): void {
|
||||||
|
this.socket.on(EventMessage.CONNECT_ERROR, callback)
|
||||||
|
}
|
||||||
|
|
||||||
sendWebrtcSignal(signal: unknown, roomId: string, userId? : string|null, receiverId? : string) {
|
sendWebrtcSignal(signal: unknown, roomId: string, userId? : string|null, receiverId? : string) {
|
||||||
return this.socket.emit(EventMessage.WEBRTC_SIGNAL, {
|
return this.socket.emit(EventMessage.WEBRTC_SIGNAL, {
|
||||||
userId: userId ? userId : this.userId,
|
userId: userId ? userId : this.userId,
|
||||||
|
Loading…
Reference in New Issue
Block a user