App.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import {Interfaces} from "./Interfaces";
  2. export class App {
  3. private clientsManager: Interfaces.ClientsManagerInterface;
  4. private apiConnector: Interfaces.ApiConnectorInterface;
  5. private conversationsManager: Interfaces.ConversationsManagerInterface;
  6. private logger: Interfaces.LoggerInterface;
  7. constructor(apiConnector: Interfaces.ApiConnectorInterface,
  8. clientsManager: Interfaces.ClientsManagerInterface,
  9. conversationsManager: Interfaces.ConversationsManagerInterface,
  10. logger: Interfaces.LoggerInterface,
  11. apiServer: Interfaces.ServerInterface,
  12. config: AppConfigInterface) {
  13. this.apiConnector = apiConnector;
  14. this.clientsManager = clientsManager;
  15. this.conversationsManager = conversationsManager;
  16. this.logger = logger;
  17. let httpServer = require('http').createServer(apiServer.processRequest.bind(apiServer)).listen(config.port, config.host);
  18. let socketIO = require('socket.io')(httpServer);
  19. socketIO.on('connection', (socket) => {
  20. socket.on('userConnect', (data) => {
  21. this.logger.debug(`Client connected`);
  22. this.clientsManager.add(socket, data, this.conversationsManager);
  23. });
  24. });
  25. this.logger.info(`Server started at ${config.host}:${config.port}`);
  26. this.logger.debug(`App started in debug mode`);
  27. }
  28. }
  29. export interface AppConfigInterface {
  30. host: string;
  31. port: number;
  32. mode: Interfaces.AppMode;
  33. }