Socket.IO/Angular Излучение на определенный идентификатор сокета не работает - PullRequest
0 голосов
/ 25 августа 2018

Работа с сокетом и Angular и проблемы с передачей информации в конкретный socket.id.

На сервере я слежу за пользователями, подключенными к сайту, вот так:

var express = require('express');

var app = express();

var bodyParser = require('body-parser');
app.use(bodyParser.json());

var path = require('path');

app.use(express.static(__dirname + '/client/public/dist/public'));

var db_url = 'mongodb://localhost:27017/DBName'

require('./server/config/mongoose.js')(db_url);

require('./server/config/routes.js')(app)

app.all("*", (req,res,next) => {
    res.sendFile(path.resolve("./client/public/dist/public/index.html"))
  });

const server = app.listen(1337);
console.log("listening on port 1337")

const io = require('socket.io')(server);

//Tracking connected users

let connected_users = [];

io.on('connection', function (socket) {

    socket.on('init',function(data){

        var objIndex = connected_users.findIndex(function (obj) { return obj.user === data['user_email']; });

        if (objIndex == -1) {
            new_connected_user = {'user':data['user_email'],'socket_id':socket.id}
            connected_users.push(new_connected_user)
            console.log("user not found. connected users currently is ",connected_users)
        }
        else {
            connected_users[objIndex].socket_id = socket.id
            console.log("user found. connected users currently is ",connected_users)
        }
    })

    socket.on('addedFriend',function(data){
        var obj = connected_users.findIndex(function (obj) { return obj.user === data['addedFriend']['email']; });
        receiver = connected_users[obj];
        io.to(`${receiver['socket_id']}`).emit('youwereadded','You have been added to a room');    
    })

});

app.listen(8000, function() {
    console.log("listening on port 8000");
})

Похоже, что главная проблема с этим кодом:

socket.on('addedFriend',function(data){
            var obj = connected_users.findIndex(function (obj) { return obj.user === data['addedFriend']['email']; });
            receiver = connected_users[obj];
            io.to(`${receiver['socket_id']}`).emit('youwereadded','You have been added to a room'); 

На стороне моего компонента у меня есть код на основном компоненте TS:

import { Component } from '@angular/core';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { HttpService } from './http.service';
import * as io from 'socket.io-client';
import { ToasterService } from './toaster-service.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'public';
  socket: SocketIOClient.Socket;

  constructor(private _router: Router,
    private _httpService: HttpService){
      this.socket = io.connect('http://localhost:0000');
    };

  ngOnInit() {

    this.socket.on('youwereadded',function(){
      console.log("got you were added message")
    })
  }

}

Я что-то не так делаю? Может ли кто-нибудь помочь, пожалуйста? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...