//permit to login on application. Return token to connect on Websocket IO.
login(){
// For now, let's completely forget the /login route.
- /*this.App.post("/login", (req: Request, res: Response) => {
+ this.App.post("/login", (req: Request, res: Response) => {
let param = req.body;
- if(!param.email){
+ /*if(!param.name){
return res.status(BAD_REQUEST).send({
message: "email parameter is empty"
});
- }
+ }*/
//TODO check user email for The Coding Machine game
let userId = uuid();
- let token = Jwt.sign({email: param.email, userId: userId}, SECRET_KEY, {expiresIn: '24h'});
+ let token = Jwt.sign({name: param.name, userId: userId}, SECRET_KEY, {expiresIn: '24h'});
return res.status(OK).send({
token: token,
mapUrlStart: URL_ROOM_STARTED,
userId: userId,
});
- });*/
+ });
}
}
// Authentication with token. it will be decoded and stored in the socket.
// Completely commented for now, as we do not use the "/login" route at all.
- /*this.Io.use((socket: Socket, next) => {
+ this.Io.use((socket: Socket, next) => {
if (!socket.handshake.query || !socket.handshake.query.token) {
return next(new Error('Authentication error'));
}
if(this.searchClientByToken(socket.handshake.query.token)){
return next(new Error('Authentication error'));
}
- Jwt.verify(socket.handshake.query.token, SECRET_KEY, (err: JsonWebTokenError, tokenDecoded: object) => {
+ Jwt.verify(socket.handshake.query.token, SECRET_KEY, (err: JsonWebTokenError, tokenDecoded: any) => {
if (err) {
return next(new Error('Authentication error'));
}
(socket as ExSocketInterface).token = tokenDecoded;
+ (socket as ExSocketInterface).id = tokenDecoded.userId;
next();
});
- });*/
+ });
this.ioConnection();
}
+ /**
+ *
+ * @param token
+ */
+ searchClientByToken(token: string): ExSocketInterface | null {
+ let clients: Array<any> = Object.values(this.Io.sockets.sockets);
+ for (let i = 0; i < clients.length; i++) {
+ let client: ExSocketInterface = clients[i];
+ if (client.token !== token) {
+ continue
+ }
+ return client;
+ }
+ return null;
+ }
+
private sendUpdateGroupEvent(group: Group): void {
// Let's get the room of the group. To do this, let's get anyone in the group and find its room.
// Note: this is suboptimal
createConnexion(name: string, characterSelected: string): Promise<ConnexionInterface> {
this.name = name;
this.character = characterSelected;
- /*return Axios.post(`${API_URL}/login`, {email: this.email})
+ return Axios.post(`${API_URL}/login`, {name: name})
.then((res) => {
this.token = res.data.token;
- this.userId = res.data.userId;*/
-
this.socket = SocketIo(`${API_URL}`, {
- /*query: {
+ query: {
token: this.token
- }*/
+ }
});
-
return this.connectSocketServer();
-
- /* return res.data;
})
.catch((err) => {
console.error(err);
throw err;
- });*/
+ });
}
/**
GroupCreatedUpdatedMessageInterface,
MessageUserJoined,
MessageUserMovedInterface,
- MessageUserPositionInterface
+ MessageUserPositionInterface, PointInterface
} from "../../Connexion";
import {CurrentGamerInterface, GamerInterface, hasMovedEventName, Player} from "../Player/Player";
import { DEBUG_MODE, RESOLUTION, ROOM, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable";
import CanvasTexture = Phaser.Textures.CanvasTexture;
import {AddPlayerInterface} from "./AddPlayerInterface";
import {PlayerAnimationNames} from "../Player/Animation";
+import {MessageUserMoved} from "../../../../back/src/Model/Websocket/MessageUserMoved";
export enum Textures {
Player = "male1"
* Create new player
*/
public addPlayer(addPlayerData : AddPlayerInterface) : void{
+ //check if exist player, if exist, move position
+ if(this.MapPlayersByKey.has(addPlayerData.userId)){
+ this.updatePlayerPosition({
+ userId: addPlayerData.userId,
+ position: addPlayerData.position
+ });
+ return;
+ }
//initialise player
let player = new Player(
addPlayerData.userId,
this.stream(user.userId, stream);
});
- this.PeerConnexionArray.get(user.userId).on('track', (track: MediaStreamTrack, stream: MediaStream) => {
+ /*this.PeerConnexionArray.get(user.userId).on('track', (track: MediaStreamTrack, stream: MediaStream) => {
this.stream(user.userId, stream);
- });
+ });*/
this.PeerConnexionArray.get(user.userId).on('close', () => {
this.closeConnexion(user.userId);
console.info(`connect => ${user.userId}`);
});
+ this.PeerConnexionArray.get(user.userId).on('data', (chunk: Buffer) => {
+ let data = JSON.parse(chunk.toString('utf8'));
+ if(data.type === "stream"){
+ this.stream(user.userId, data.stream);
+ }
+ });
+
this.addMedia(user.userId);
}
* @param stream
*/
private stream(userId : any, stream: MediaStream) {
+ if(!stream){
+ this.MediaManager.disabledVideoByUserId(userId);
+ this.MediaManager.disabledMicrophoneByUserId(userId);
+ return;
+ }
this.MediaManager.addStreamRemoteVideo(userId, stream);
}
try {
let transceiver : any = null;
if(!this.MediaManager.localStream){
+ //send fake signal
+ if(!this.PeerConnexionArray.has(userId)){
+ return;
+ }
+ this.PeerConnexionArray.get(userId).write(new Buffer(JSON.stringify({
+ type: "stream",
+ stream: null
+ })));
return;
}
this.MediaManager.localStream.getTracks().forEach(