socket.handler.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * author: Sand
  3. * since: 2016/11/17
  4. */
  5. "use strict";
  6. let log = require("../util/log.js");
  7. let clientCache = require('../models/socket.io/client.cache').clientCache();
  8. let PatientClient = require('./../models/socket.io/patient.client');
  9. let Sessions = require('../models/sessions/sessions');
  10. let Users = require('../models/user/users');
  11. let sessions = new Sessions();
  12. let users = new Users();
  13. class SocketHandler {
  14. constructor(socketServer) {
  15. this._socketServer = socketServer;
  16. }
  17. /**
  18. * 启用事件监听。
  19. */
  20. start() {
  21. let socketServer = this._socketServer;
  22. socketServer.sockets.on('connection', function (socket) {
  23. // 客户端注册
  24. socket.on('login', function (data) {
  25. if (!data.userId) {
  26. socketServer.sockets.emit('error', {message: 'Missing fields(s): userId.'});
  27. } else {
  28. if(clientCache.removeByUserId(data.userId)){
  29. log.info("User " + data.userId + " already login");
  30. return;
  31. }
  32. log.info('User ' + data.userId + ' login');
  33. let patientClient = new PatientClient(socket, socketServer);
  34. patientClient.userId = data.userId;
  35. patientClient.password = data.password;
  36. clientCache.addClient(patientClient);
  37. users.login(data.userId, 10, '', '');
  38. socket.emit('ack', {});
  39. }
  40. });
  41. // 接收客户端消息
  42. socket.on('message', function (data) {
  43. log.info('Got message from ' + clientCache.findBySocket(socket).userId);
  44. let sessionId = data.session_id;
  45. let message = data.message;
  46. message.timestamp = new Date();
  47. /*sessions.createSession(sessionId, "Let's talk!", 1, ['504a0bcddb1e4e37a0306b39c51900b5', 'cd92414c-5b06-11e6-8344-fa163e8aee56'], function (err, res) {
  48. sessions.saveMessageBySession(sessionId, message);
  49. });*/
  50. sessions.saveMessageBySession(sessionId, message);
  51. });
  52. // 客户端退出
  53. socket.on('logout', function (data) {
  54. let client = clientCache.findBySocket(socket);
  55. if (client) {
  56. log.info('User logout: ' + client.userId);
  57. clientCache.removeByUserId(client.userId);
  58. }
  59. });
  60. // 客户端断开
  61. socket.on('disconnect', function () {
  62. let patientClient = clientCache.findBySocket(socket);
  63. if (patientClient) {
  64. log.info("User disconnect: ", patientClient.userId);
  65. clientCache.removeByUserSocket(socket);
  66. }
  67. });
  68. socket.emit('welcome', {message: 'Welcome to connect IM server, please login.'});
  69. });
  70. }
  71. }
  72. module.exports = SocketHandler;