Parcourir la source

fix chat does not started correctly

alexlcdee il y a 8 ans
Parent
commit
8e1206fd36
5 fichiers modifiés avec 53 ajouts et 45 suppressions
  1. 1 1
      src/App.ts
  2. 13 12
      src/Client.ts
  3. 14 7
      src/Conversation.ts
  4. 4 4
      src/Interfaces.ts
  5. 21 21
      src/main.ts

+ 1 - 1
src/App.ts

@@ -23,7 +23,7 @@ export class App {
         socketIO.on('connection', (socket) => {
             socket.on('userConnect', (data) => {
                 this.logger.debug(`Client connected`);
-                this.clientsManager.add(socket, data);
+                this.clientsManager.add(socket, data, this.conversationsManager);
             });
         });
 

+ 13 - 12
src/Client.ts

@@ -31,11 +31,9 @@ export namespace Clients {
         private apiConnector: Interfaces.ApiConnectorInterface;
         private clients: { [index: string]: Client } = {};
         private logger: Interfaces.LoggerInterface;
-        private conversationsManager: Interfaces.ConversationsManagerInterface;
 
-        constructor(apiConnector: Interfaces.ApiConnectorInterface, conversationsManager: Interfaces.ConversationsManagerInterface, logger: Interfaces.LoggerInterface) {
+        constructor(apiConnector: Interfaces.ApiConnectorInterface, logger: Interfaces.LoggerInterface) {
             this.apiConnector = apiConnector;
-            this.conversationsManager = conversationsManager;
             this.logger = logger;
         }
 
@@ -45,7 +43,7 @@ export namespace Clients {
                     .then((response: string) => {
                         try {
                             let data = JSON.parse(response);
-                            this.clients[id] = new Client(this.apiConnector, this, this.conversationsManager, this.logger, data);
+                            this.clients[id] = new Client(this.apiConnector, this, this.logger, data);
                             resolve(this.clients[id]);
                         } catch (err) {
                             reject(err);
@@ -55,7 +53,7 @@ export namespace Clients {
             });
         }
 
-        add(socket: SocketIO.Socket, data) {
+        add(socket: SocketIO.Socket, data, conversationsManager: Interfaces.ConversationsManagerInterface) {
             function setStatus(client: Interfaces.ClientInterface, logger: Interfaces.LoggerInterface) {
                 logger.debug(`Setting status of client with ID=${data.id} to "Online"`);
                 client.status = true;
@@ -63,6 +61,7 @@ export namespace Clients {
 
             this.get(data.id).then((client: Client) => {
                 client.addSocket(socket);
+                client.setConversationsManager(conversationsManager);
             }, (error: Error) => {
                 console.log(error.message);
                 console.log(error.stack);
@@ -152,13 +151,12 @@ export namespace Clients {
             return this.isOnline;
         }
 
-        constructor(api: Interfaces.ApiConnectorInterface, clientsManager: Interfaces.ClientsManagerInterface, conversationsManager: Interfaces.ConversationsManagerInterface, logger: Interfaces.LoggerInterface, data: MessagingClientData) {
+        constructor(api: Interfaces.ApiConnectorInterface, clientsManager: Interfaces.ClientsManagerInterface, logger: Interfaces.LoggerInterface, data: MessagingClientData) {
             this.logger = logger;
             this.id = data.id;
             this.logger.debug(`Calling Client.constructor for ID=${this.id}`);
             this.api = api;
             this.clientsManager = clientsManager;
-            this.conversationsManager = conversationsManager;
             this.clientPhoto = data.photo;
             this.clientName = data.name;
             this.payedTime = parseInt(data.payedTime);
@@ -168,12 +166,15 @@ export namespace Clients {
             this.status = true;
         }
 
+        public setConversationsManager(manager: Interfaces.ConversationsManagerInterface) {
+            this.conversationsManager = manager;
+        }
+
         private releaseQueue() {
-            for (let i in this.messageQueue) {
-                if (this.messageQueue.hasOwnProperty(i)) {
-                    this.sendToSockets(this.messageQueue[i].eventName, this.messageQueue[i].data);
-                }
-            }
+            this.messageQueue.forEach((item, index) => {
+                this.sendToSockets(item.eventName, item.data);
+                this.messageQueue.splice(index,1);
+            });
         }
 
         private sendToSockets(event: string, data: {} = {}) {

+ 14 - 7
src/Conversation.ts

@@ -3,6 +3,7 @@ import {Interfaces} from "./Interfaces";
 export module Conversations {
 
     import ClientInterface = Interfaces.ClientInterface;
+    import ConversationInterface = Interfaces.ConversationInterface;
 
     export class NullManager implements Interfaces.ConversationsManagerInterface {
         get(id: string): Promise<Interfaces.ConversationInterface> {
@@ -33,7 +34,7 @@ export module Conversations {
             this.logger = logger;
         }
 
-        get(id: string): Promise<Conversation> {
+        get(id: string): Promise<ConversationInterface> {
             this.logger.debug(`Get conversation with ID=${id}`);
             return new Promise((resolve, reject) => {
                 if (this.conversations.hasOwnProperty(id)) {
@@ -149,12 +150,14 @@ export module Conversations {
                 if (state.isEqualsTo(Interfaces.ConversationState.RUNNING())) {
                     this.setRunning();
                 }
-                if (state.isEqualsTo(Interfaces.ConversationState.STOPPED()) || state.isEqualsTo(Interfaces.ConversationState.PAUSED())) {
+                if (state.isEqualsTo(Interfaces.ConversationState.PAUSED())) {
                     this.setPaused();
                 }
                 if (state.isEqualsTo(Interfaces.ConversationState.STOPPED())) {
                     this.setStopped();
                 }
+            } else {
+                this.logger.debug(`Conversation state already set to "${state.toString()}"`);
             }
         }
 
@@ -187,30 +190,30 @@ export module Conversations {
         private sync() {
             this.initiator.send('chat-sync-timer', {
                 conversationId: this.id,
-                duration: this.duration
+                duration: Math.ceil(this.duration)
             });
 
             this.recipient.send('chat-sync-timer', {
                 conversationId: this.id,
-                duration: this.duration
+                duration: Math.ceil(this.duration)
             });
 
             this.apiConnector.execute('/conversations', {
                 id: this.id,
                 action: 'duration',
-                duration: this.duration
+                duration: Math.ceil(this.duration)
             });
 
             this.apiConnector.execute('/user', {
                 action: 'updatetime',
                 id: this.initiator.id,
-                value: this.initiator.payedTime
+                value: Math.ceil(this.initiator.payedTime)
             });
 
             this.apiConnector.execute('/user', {
                 action: 'updatetime',
                 id: this.recipient.id,
-                value: this.recipient.payedTime
+                value: Math.ceil(this.recipient.payedTime)
             });
         }
 
@@ -226,6 +229,10 @@ export module Conversations {
 
         private setStopped() {
             this.logger.debug(`Set conversation with ID=${this.id} stopped`);
+            clearInterval(this.interval);
+            this.interval = null;
+            clearInterval(this.syncInterval);
+            this.syncInterval = null;
             delete this.initiator.conversations[this.id];
             delete this.recipient.conversations[this.id];
             this.apiConnector.execute('/conversations', {id: this.id, action: 'stop', duration: this.duration});

+ 4 - 4
src/Interfaces.ts

@@ -34,7 +34,7 @@ export module Interfaces {
         get(id: string): Promise<ClientInterface>
         get(id: string, refresh: boolean): Promise<ClientInterface>
 
-        add(socket: SocketIO.Socket, data);
+        add(socket: SocketIO.Socket, data, conversationsManager: ConversationsManagerInterface);
     }
 
     export interface ConversationsManagerInterface {
@@ -125,15 +125,15 @@ export module Interfaces {
         }
 
         private static availableModes() {
-            return ['dev', 'prod'];
+            return [AppMode.DEV().toString(), AppMode.PROD().toString()];
         }
 
         static DEV() {
-            return AppMode.create('dev');
+            return new AppMode('dev');
         }
 
         static PROD() {
-            return AppMode.create('prod');
+            return new AppMode('prod');
         }
     }
 

+ 21 - 21
src/main.ts

@@ -7,26 +7,26 @@ import {Interfaces} from "./Interfaces"
 import {ChatApi} from "./ChatApi";
 import * as HTTP from "http";
 
-require('dotenv').config({path: __dirname + "/.env"});
+(function main() {
+    require('dotenv').config({path: __dirname + "/.env"});
+    let logger = new Log.ConsoleLogger(Interfaces.AppMode.create(process.env.MODE));
+    try {
+        let apiConnector = new Api.DefaultConnector(process.env.API_HOST, process.env.API_PORT, process.env.API_ENDPOINT_PREFIX, logger);
+        let clientsManager = new Clients.DefaultManager(apiConnector, logger);
+        let conversationsManager = new Conversations.DefaultManager(apiConnector, clientsManager, logger);
+        let apiServer = new ChatApi.ApiServer(clientsManager, conversationsManager, logger, {
+            '/api/refreshUsers': function (request: HTTP.IncomingMessage, response: HTTP.ServerResponse) {
+                this.refreshUsers(request, response);
+            }
+        });
 
-let logger = new Log.ConsoleLogger(Interfaces.AppMode.create(process.env.MODE));
-try {
-    let apiConnector = new Api.DefaultConnector(process.env.API_HOST, process.env.API_PORT, process.env.API_ENDPOINT_PREFIX, logger);
-    let clientsManager = new Clients.NullManager();
-    let conversationsManager = new Conversations.DefaultManager(apiConnector, clientsManager, logger);
-    clientsManager = new Clients.DefaultManager(apiConnector, conversationsManager, logger);
-    let apiServer = new ChatApi.ApiServer(clientsManager, conversationsManager, logger, {
-        '/api/refreshUsers': function (request: HTTP.IncomingMessage, response: HTTP.ServerResponse) {
-            this.refreshUsers(request, response);
-        }
-    });
+        new App(apiConnector, clientsManager, conversationsManager, logger, apiServer, {
+            port: process.env.PORT,
+            host: process.env.HOST,
+            mode: Interfaces.AppMode.create(process.env.MODE)
+        });
 
-    new App(apiConnector, clientsManager, conversationsManager, logger, apiServer, {
-        port: process.env.PORT,
-        host: process.env.HOST,
-        mode: Interfaces.AppMode.create(process.env.MODE)
-    });
-
-} catch (e) {
-    logger.debug(e.message);
-}
+    } catch (e) {
+        logger.error(e.message);
+    }
+})();