Advertisement
Guest User

SocketManager

a guest
Jul 4th, 2018
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3. class SocketManager {
  4.  
  5.     constructor() {
  6.         //Random populate DB
  7.  
  8.     }
  9.     connect(clientSocket) {
  10.  
  11.         console.log('[SocketManager] connect() function called')
  12.         console.log('[SocketManager] a client connected, client\'s socket id = ' + clientSocket.id)
  13.  
  14.         this.checkIfUserExists(clientSocket);
  15.  
  16.         clientSocket.on('answerCheckIfClientExists', (clientsocketid) => this.answerCheckIfClientExists(clientsocketid, clientSocket))
  17.  
  18.         clientSocket.on('componentDidMount', () => console.log('componentDidMount()'))
  19.  
  20.         clientSocket.on('getAllCards', (interval) => this.getAllCards(interval, clientSocket));
  21.  
  22.         clientSocket.on('getMessages', (user) => this.getMessages(user, clientSocket));
  23.  
  24.         clientSocket.on('getNotification', (userMail) => this.getNotification(userMail, clientSocket));
  25.  
  26.         clientSocket.on('deleteThisNotification', (userMail, notificationToDelete) => this.deleteThisNotification(userMail, notificationToDelete, clientSocket));
  27.  
  28.         clientSocket.on('tryLogin', (user) => this.tryLogin(user, clientSocket));
  29.  
  30.         clientSocket.on('register', (user) => this.register(user, clientSocket));
  31.  
  32.         clientSocket.on('addInfoToProfil', (userMail, newInfos) => this.addInfosToProfil(userMail, newInfos, clientSocket));
  33.  
  34.         clientSocket.on('getVisits', (email) => this.getVisits(email, clientSocket));
  35.  
  36.         clientSocket.on('getFriend', (email) => this.getFriends(email, clientSocket));
  37.  
  38.         clientSocket.on('onMessage', (obj) => ChatManager.onMessage(obj.message, clientSocket.id, UserManager.getUserByEmail(obj.receiver).socketid ) );
  39.  
  40.         clientSocket.on('getAllOffers', () => this.getAllOffers(clientSocket));
  41.  
  42.         //clientSocket.on('getAllMessages', (user, userInTalk) => this.getAllMessages(user,userInTalk,clientSocket));
  43.  
  44.         clientSocket.on('sendMessageByChat', (message,user,userInTalk) => this.sendMessageChat(message,user,userInTalk, clientSocket))
  45.         //DECOMMENT THIS LINE FOR POPUALTE YOUR MONGODB
  46.         // this.populateDB();
  47.       }
  48.  
  49.     answerCheckIfClientExists(clientsocketid, client){
  50.       if(clientsocketid !== null){
  51.         UserManager.updateUserSocketID(UserManager.getUserBySocketID(clientsocketid), client.id);
  52.       }
  53.     }
  54.  
  55.     checkIfUserExists(client){
  56.       console.log("[SocketManager] checkIfUserExists() function called");
  57.       console.log('to : ' + client.id)
  58.       io.sockets.to(client.id).emit('checkIfUserExists');
  59.     }
  60.     getAllMessages(user, userInTalk, client){
  61.         SchemaManager.modelMessage.findOne({ userName: user}, function (err, responseListConv) {
  62.             if (err) {
  63.                 throw err;
  64.             }
  65.             else {
  66.                 responseListConv.conversations.forEach(function(element, index){
  67.                     element.forEach(function(item, i){
  68.                         if(item.userInTalk == userInTalk){
  69.                             if (item.conversation.length > 0) {
  70.                                 client.emit("responseGetAllMessages", item.conversation);
  71.                             }
  72.                         }
  73.                     });
  74.  
  75.  
  76.                 });
  77.             }
  78.         });
  79.     }
  80.  
  81.     sendMessageChat(message, user, userInTalk, client){
  82.         /*console.log("sennnd message", message, user, userInTalk);
  83.         SchemaManager.modelMessage.findOne({userName: user}, function (err, responseListConv) {
  84.             if(err){
  85.                 throw err;
  86.             }
  87.             else{
  88.                 console.log("RESPONNNnnNNNNNNNNNNSSSSSSS",responseListConv);
  89.                if(!responseListConv.conversations.length > 0){
  90.                    console.log("no conversation");
  91.                    var newConv = { userInTalk : userInTalk, conversation :[{name: user}, {date : Date.now()}, {message: message}]};
  92.                     SchemaManager.modelMessage.updateOne({userName: user},{$set:{conversations : newConv}}, function(err, response){
  93.                         if(err){
  94.                             throw err;
  95.                         }
  96.                         else{
  97.                             console.log(response);
  98.                         }
  99.                     })
  100.                 }
  101.                 else{
  102.                     console.log("conversation exists");
  103.                     responseListConv.conversations.forEach(function(element, index){
  104.                         if(element.userInTalk == userInTalk){
  105.                             console.log()
  106.                             var NewMessage= { userInTalk : userInTalk, conversation :[{name: user}, {date : Date.now()}, {message: message}]};
  107.                             element.conversation.push(NewMessage);
  108.                             SchemaManager.modelMessage.updateOne({ userName: user}, {$set:{conversations : responseListConv.conversations}}, function(err, response){
  109.                                 if(err){
  110.                                     throw err;
  111.                                 }
  112.                                 else{
  113.                                     client.emit("responseSendMessageByChat", response);
  114.                                 }
  115.                             });
  116.  
  117.                         }
  118.                     });
  119.                 }
  120.  
  121.             }
  122.         });*/
  123.     }
  124.  
  125.     populateDB(){
  126.  
  127.         var listCompetence =["C", "C#","C++","AngularJS","Angular 2", "Angular 4", "Angular 5", "ReactJS", "Python", "git", "docker", "java", "j2ee", "kotlin","swift", "cordova", "html", "css", "js", "VueJs", "Ajax", "Jquery", "php"]
  128.         var listEmploiNow= ["Developpeur Mobile", "Designer", "Chef de Projet", "Developper Web", "Consultant Technique", "DataScientist"];
  129.         var listFormation = ["HEC", "EPITECH", "YNOV", "Bac Pro Cuisine", "BTP"];
  130.         var listLastJob = ["Pere Noel", "Kebabier", "Epouvantail", "Astronaute", "Bourreau", "Président de la République"];
  131.         var listInterest =["sport", "gaming", "tchilling", "Holidays"];
  132.         var listDescription=["J'adore la biere", "Je suis passionée par les bonzais","Mon secret est que ce n'est pas moi sur cette carte", "C'est ma 300e candidature pour un stage","Spoil GOT: Tyrion fini par grandir"];
  133.         // Random Creating User
  134.         for(var i=0; i <194; i++){
  135.             console.log("super")
  136.             var nameRandom = randomName.last()
  137.             var firstName = randomName.first()
  138.             var populateComp = [];
  139.             for(var x=0; x <4; x++){
  140.                  var item = listCompetence[Math.floor(Math.random()*listCompetence.length)];
  141.                  populateComp.push(item)
  142.             }
  143.  
  144.             var picture = "/src/images/randomPic/fakePic"+i+".jpg"
  145.             var user = { name: nameRandom, username: firstName,dateOfBirth: "", email: nameRandom+"."+firstName+"@gmail.com", password: nameRandom, emploiNow: listEmploiNow[Math.floor(Math.random()*listEmploiNow.length)],picture:picture, formation: listFormation[Math.floor(Math.random()*listFormation.length)], listLastEmploy: listLastJob[Math.floor(Math.random()*listLastJob.length)], description: listDescription[Math.floor(Math.random()*listDescription.length)], listCompetence: populateComp, listInterest: listInterest[Math.floor(Math.random()*listInterest.length)]  }
  146.  
  147.             SchemaManager.modelUser.create(user, function(err, response){
  148.                 if(err){
  149.                     throw err;
  150.                 }
  151.                 else{
  152.                     console.log(response);
  153.                 }
  154.             });
  155.         }
  156.     }
  157.     getAllOffers(client){
  158.         console.log("getAlloffer called")
  159.         SchemaManager.modelOffers.find({}, function(err, response){
  160.             if(err){
  161.                 throw err;
  162.             }
  163.             else{
  164.                 console.log(response);
  165.                 if(response != null){
  166.                     client.emit("responseGetAllOffer", response);
  167.                 }
  168.             }
  169.         });
  170.     }
  171.  
  172.     getFriends(email, client){
  173.         console.log("getFriend", email);
  174.         SchemaManager.modelUser.findOne({ email: email }, function (err, responseUser) {
  175.             if (err) {
  176.                 throw err;
  177.             }
  178.             else {
  179.                 console.log(responseUser);
  180.                 if (responseUser != null) {
  181.                     client.emit("responseGetFriend", responseUser);
  182.                 }
  183.                 else {
  184.                     client.emit("responseGetFriend", null);
  185.                 }
  186.             }
  187.         });
  188.     }
  189.  
  190.     getAllCards(interval, client) {
  191.         console.log('[SocketManager] getAllCards() function called')
  192.         SchemaManager.modelUser.find({}, function (err, allCards) {
  193.             if (err) {
  194.                 throw err;
  195.             }
  196.             else {
  197.                 var arrayAllResponse = [];
  198.                 allCards.forEach(function(element, index){
  199.                     if(index <10){
  200.                         var item = allCards[Math.floor(Math.random()*allCards.length)];
  201.                         arrayAllResponse.push(item);
  202.                     }
  203.                 });
  204.                 client.emit('responseGetAllCards', arrayAllResponse);
  205.             }
  206.         });
  207.     }
  208.  
  209.  
  210.     getNotification(userMail, client) {
  211.       console.log('[SocketManager] getNotification() function called')
  212.         var listNewNotification = [];
  213.         SchemaManager.modelNotification.findOne({ userMail: userMail }, function (err, responseNotifications) {
  214.             if (err) {
  215.                 throw err;
  216.             }
  217.             else {
  218.                 if (responseNotifications) {
  219.                     responseNotifications.map(function (item) {
  220.                         if (!item.statusView) {
  221.                             listNewNotification.push(item); s
  222.                         }
  223.                     });
  224.                     client.emit("responseNotifications", listNewNotification);
  225.                 }
  226.                 else {
  227.                     client.emit("responseNotifications", null);
  228.                 }
  229.             }
  230.         });
  231.     }
  232.  
  233.     deleteThisNotification(userMail, notificationToDelete, client) {
  234.         console.log('[SocketManager] deleteThisNotification() function called')
  235.         SchemaManager.modelNotification.findOne({ userMail: userMail }, function (err, responseNotification) {
  236.             if (err) {
  237.                 throw err;
  238.             }
  239.             else {
  240.                 responseNotification.listNotification.map(function (item, index) {
  241.                     if (item == notificationToDelete) {
  242.                         responseNotification.listNotification.slice(index);
  243.                     }
  244.                 });
  245.  
  246.                 client.emit("responseDeleteThisNotification", responseNotification.listNotification)
  247.             }
  248.         });
  249.     }
  250.  
  251.     tryLogin(user, client) {
  252.         console.log('[SocketManager] tryLogin() function called')
  253.         var userToFind = {email : user.email};
  254.         SchemaManager.modelUser.findOne(userToFind, function(err, connectedUser){
  255.             if(err){
  256.                     throw err;
  257.             }
  258.             else{
  259.                 if(connectedUser != null){
  260.                     if(connectedUser.password == user.password){
  261.                         console.log('[SocketManager] function tryLogin() success');
  262.                         UserManager.createUser(connectedUser._id, client.id, connectedUser.name, connectedUser.username, connectedUser.email, []);
  263.  
  264.                         client.emit('responseTryLogin', connectedUser);
  265.                     }
  266.                     else{
  267.                         client.emit('responseTryLogin', null);
  268.                     }
  269.                 }
  270.                 else{
  271.                     client.emit('responseTryLogin', null);
  272.                 }
  273.             }
  274.         });
  275.  
  276.     }
  277.  
  278.  
  279.     register(user, client) {
  280.         console.log('[SocketManager] register() function called')
  281.         console.log("register server side", user)
  282.         var user = { name: user.name, username: user.username, dateOfBirth: user.dateOfBirth, email: user.email, password: user.password, emploiNow: "test",picture:"/src/images/user.png", formation: "formation", listLastEmploy: ["emploi1", "emploi2"], description: "description", listCompetence: ["C","C++"], listInterest: ["Pere Noel", "Drake"], friendList:["superUser@startJob.com"]  }
  283.         SchemaManager.modelUser.findOne({mail : user.email}, function(err, response){
  284.             if(err){
  285.                 throw err;
  286.             }
  287.             else{
  288.                 if(response == null){
  289.                     SchemaManager.modelUser.create(user, function (err, userCreated) {
  290.                         if (err) {
  291.                             throw err;
  292.                         }
  293.                         else {
  294.                             console.log("userCreated", userCreated);
  295.                             if (userCreated != null) {
  296.                                 var userVisists = { id: userCreated._id, userMail: userCreated.email, listUserVisit: [], listVisitedByUser: []};
  297.                                 SchemaManager.modelVisits.create(userVisists, function(err, userVisitCreated){
  298.                                     if(err){
  299.                                         throw err;
  300.                                     }
  301.                                     else{
  302.                                         console.log(userVisitCreated);
  303.                                         var userNotification = {id: userCreated._id, userMail: userCreated.email, listNotification: []};
  304.                                         SchemaManager.modelNotification.create(userNotification, function(err, userNotificationCreated){
  305.                                             if(err){
  306.                                                 throw err;
  307.                                             }
  308.                                             console.log(userNotificationCreated);
  309.                                             var userMessage = {id: userCreated._id, userName: userCreated.email,conversations: []};
  310.                                             SchemaManager.modelMessage.create(userMessage, function(err, userMessageCreated){
  311.                                                 if(err){
  312.                                                     throw err;
  313.                                                 }
  314.                                                 console.log(userMessageCreated);
  315.                                                 client.emit("responseRegister", userCreated);
  316.                                             });
  317.                                         });
  318.                                     }
  319.                                 });
  320.                             }
  321.                             else {
  322.                                 client.emit("responseRegister", null);
  323.                             }
  324.                         }
  325.                     });
  326.                 }
  327.             }
  328.         });
  329.  
  330.         // this.populateDB();
  331.     }
  332.  
  333.     addInfosToProfil(userMail, newInfos, client) {
  334.         console.log('[SocketManager] addInfoToProfil() function called')
  335.         switch (newInfos) {
  336.             case newInfos.emploiNow:
  337.                 var lastJob;
  338.                 var newListLastJob = [];
  339.                 SchemaManager.modelUser.findOne({ email: userMail }, function (err, response) {
  340.                     if (err) {
  341.                         throw err;
  342.                     }
  343.                     else {
  344.                         lastJob = response.emploiNow;
  345.                         newListLastJob.push(response.listLastEmploy);
  346.                         newListLastJob.push(lastJob);
  347.                         SchemaManager.modelUser.updateOne({ email: userMail }, $set[{ emploiNow: newInfos.emploiNow }, { listLastEmploy: newListLastJob }], function (err, response) {
  348.                             if (err) {
  349.                                 throw err;
  350.                             }
  351.                             else {
  352.                                 if (response) {
  353.                                     client.emit("reponseAddInfo", true);
  354.                                 }
  355.                             }
  356.                         });
  357.                     }
  358.                 });
  359.  
  360.                 break;
  361.             case newInfos.picture:
  362.                 SchemaManager.modelUser.findOne({ email: userMail }, function (err, response) {
  363.                     if (err) {
  364.                         throw err;
  365.                     }
  366.                     else {
  367.                         cloudinary.v2.uploader.upload(newInfos.picture,{ public_id : response.public_id},
  368.                             function(error, result) {
  369.                                 if(error){
  370.                                     console.log(error);
  371.                                 }
  372.                                 signature = result.signature;
  373.                                 SchemaManager.modelUser.updateOne({ _id: response._id }, { $set: { picture: result.secure_url }},function(err, response){
  374.                                     if(err){
  375.                                         throw err;
  376.                                     }
  377.                                     else{
  378.                                         client.emit("responseAddInfosToProfil", response)
  379.                                     }
  380.                             });
  381.                         });
  382.                     }
  383.                 });
  384.  
  385.                 break;
  386.             case newInfos.formation:
  387.                 SchemaManager.modelUser.updateOne({ email: userMail }, $set[{ emploiNow: newInfos.formation }], function (err, response) {
  388.                     if (err) {
  389.                         throw err;
  390.                     }
  391.                     else {
  392.                         if (response) {
  393.                             client.emit("reponseAddInfo", true);
  394.                         }
  395.                     }
  396.                 });
  397.                 break;
  398.             case newInfos.listLastEmploy:
  399.                 SchemaManager.modelUser.updateOne({ email: userMail }, $set[{ emploiNow: newInfos.listLastEmploy }], function (err, response) {
  400.                     if (err) {
  401.                         throw err;
  402.                     }
  403.                     else {
  404.                         if (response) {
  405.                             client.emit("reponseAddInfo", true);
  406.                         }
  407.                     }
  408.                 });
  409.                 break;
  410.             case newInfos.listCompetence:
  411.                 SchemaManager.modelUser.updateOne({ email: userMail }, $set[{ emploiNow: newInfos.emploiNow }], function (err, response) {
  412.                     if (err) {
  413.                         throw err;
  414.                     }
  415.                     else {
  416.                         if (response) {
  417.                             client.emit("reponseAddInfo", true);
  418.                         }
  419.                     }
  420.                 });
  421.                 break;
  422.             case newInfos.listInterest:
  423.                 SchemaManager.modelUser.updateOne({ email: userMail }, $set[{ emploiNow: newInfos.emploiNow }], function (err, response) {
  424.                     if (err) {
  425.                         throw err;
  426.                     }
  427.                     else {
  428.                         if (response) {
  429.                             client.emit("reponseAddInfo", true);
  430.                         }
  431.                     }
  432.                 });
  433.                 break;
  434.             case newInfos.password:
  435.                 SchemaManager.modelUser.updateOne({ email: userMail }, $set[{ emploiNow: newInfos.emploiNow }], function (err, response) {
  436.                     if (err) {
  437.                         throw err;
  438.                     }
  439.                     else {
  440.                         if (response) {
  441.                             client.emit("reponseAddInfo", true);
  442.                         }
  443.                     }
  444.                 });
  445.                 break;
  446.         }
  447.     }
  448.  
  449.     getVisits(email, client) {
  450.         console.log('[SocketManager] getVisits() function called')
  451.         SchemaManager.modelVisits.findOne({ email: email }, function (err, response) {
  452.             if (err) {
  453.                 throw err;
  454.             }
  455.             else {
  456.                 if (response != null) {
  457.                     client.emit("visitsResponse", response);
  458.                 }
  459.                 else {
  460.                     client.emit("visitsResponse", null);
  461.                 }
  462.             }
  463.         })
  464.     }
  465.  
  466.  
  467.  
  468.  
  469.     // utils
  470.  
  471.     addNotificationToThisUser(userTargeted, newNotification) {
  472.         console.log('[SocketManager] addNotificationToThisUser() function called')
  473.         modelNotification.findOne({ userMail: userTargeted }, function (err, response) {
  474.             if (err) {
  475.                 throw err;
  476.             }
  477.             else {
  478.                 var listNotificationToUpdate = [];
  479.                 listNotificationToUpdate.push(response.listNotification);
  480.                 listNotificationToUpdate.push(newNotification);
  481.                 modelNotification.updateOne({ userMail: userTargeted }, $set[{ listNotification: listNotificationToUpdate }], function (err, result) {
  482.                     if (err) {
  483.                         throw err;
  484.                     }
  485.                     else {
  486.                         console.log(result);
  487.                     }
  488.                 })
  489.             }
  490.         });
  491.     }
  492.  
  493.     checkIfAlreadyKnown(userMail, userChecked) {
  494.         console.log('[SocketManager] checkIfAlreadyKnown() function called')
  495.         SchemaManager.modelVisits.findOne({ email: userMail }, function (err, response) {
  496.             if (err) {
  497.                 throw err;
  498.             }
  499.             else {
  500.                 var boolUserAlreadyKnow;
  501.                 response.listVisitedByUser.map(function (item, index) {
  502.                     if (item.name == userChecked) {
  503.                         boolUserAlreadyKnow == true
  504.                     }
  505.                 });
  506.                 if (boolUserAlreadyKnow == true) {
  507.                     return true;
  508.                 }
  509.                 else {
  510.                     return false;
  511.                 }
  512.             }
  513.         });
  514.     }
  515.  
  516.  
  517.  
  518. }
  519.  
  520. const instance = new SocketManager();
  521. module.exports = instance;
  522.  
  523. const SchemaManager = require('../SchemaManager');
  524.  
  525. const UserManager = require('../UserManager');
  526.  
  527. const ChatManager = require('../ChatManager');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement