AngularJS + socket.io: only works in one direction

I have a problem with angular JS + node + socketio. In my application, you can send data from the client to the server through socket.emit ('entryUsername', 'Guest'); as in controlls.js. But it does not work from server to client. After the server receives the "username entered", it should fix the "UsernameOk". But he does not do it ... Or he sends it, but the controller does not receive it. Is there something wrong because I have several controllers?

Does anyone have an idea?

Edit1:

Ok, fixed it using server-side io.sockets.emit('enteredUsername', username)instead socket.emit('enteredUsername', username).

server.js

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

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

io.sockets.on('connection', function(socket) {
     console.log('client connected!');

    socket.on('enteredUsername', function(data) {
        console.log('Username: ' + data);
        socket.broadcast.emit('UsernameOk', data);
        socket.emit('UsernameOk', data);
    });


});

server.listen(1337);

services.js

angular.module('myApp.services', [])
    .factory('socket', function($rootScope) {
        var socket = io.connect();
        return {
            on: function(eventName, callback) {
                socket.on(eventName, function() {
                    var args = arguments;
                    $rootScope.$apply(function() {
                        callback.apply(socket, args);
                    });
                });
            },
            emit: function(eventName, data, callback) {
                socket.emit(eventName, data, function() {
                    var args = arguments;
                    $rootScope.$apply(function() {
                        if(callback) {
                            callback.apply(socket, args);
                        }
                    });
                });
            }
        };
    });

controllers.js

angular.module('myApp.controllers', [])
    .controller('usernameCtrl', ['$scope', 'socket', function($scope, socket) {
        $scope.username = 'guest';

        $scope.EnteredUsername = function() {
            var username = $scope.username;
            socket.emit('enteredUsername', username);
        }

        socket.on('UsernameOk', function(data) {
            console.log('Client-Get: UsernameOk -> ' + data);
        });
    }]);
+4

Source: https://habr.com/ru/post/1547410/


All Articles