2016-06-08 6 views
2

In meiner Spielanwendung würde Ich mag für den Umgang mit Socket-Verbindung und Autorisierung und mehr Klassen für Ereignisbehandlung allgemeine Klasse haben, so:Ist es möglich, dem gleichen socket.io.on Event mehrere Handler hinzuzufügen?

//loading game/lobby/other socket routers 
... 

var socketRouter = function(server) { 
    var io = Io(server); 

    io.use(socketioJwt.authorize({ 
     secret: config.secretKey, 
     handshake: true 
    })); 

    io.on("connection", function(socket) { 
     lobbySocketRouter(socket); 
     gameSocketRouter(socket); 
     //other routers 
     ... 

     socket.on("disconnect", function() { 
      console.log("DISCONNECTED", socket.id); 
     }); 
    }); 
}; 

Es ist kein Problem für verschiedene Router einzigartige Ereignisnamen zu generieren sich nicht gegenseitig stören. Das Problem ist in disconnect-Ereignis - Ich möchte, dass jeder Router die Möglichkeit hat, die richtigen Maßnahmen zu ergreifen. Ist es richtig, eigene Handler hinzuzufügen Ereignis in jedem Router so zu trennen, so dass jeder von ihnen auslösen würde:

 //lobbySocketRouter 
     socket.on("disconnect", function() { 
      //handling lobbySocketRouter special actions 
     }); 
... 
     //gameSocketRouter 
     socket.on("disconnect", function() { 
      //handling gameSocketRouter special actions 
     }); 

?

+0

Sie Zimmer nutzen kann und seine 'join' und' leave' Ereignisse, es ist flexibler als folgende 'disconnect' Ereignis für alle Veranstaltungen. –

Antwort

1
I want every router having possibility to perform right action on it. Is it correct to add own handler to disconnect event in every router like this so each of them would trigger: 

Route“ Ich glaube, Sie sprechen über die Namespaces, können Sie multiples „Router“, Griff und dann jedes Trennungsereignis behandeln auf dem Namespace abhängig.

Ich habe in my previous answer eine Vorlage Anwendung schrieb mehrere Namespaces innerhalb eines Arrays zu erhalten:

socket.on('disconnect', disconnectCallback(socket,ns));       

    function disconnectCallback(socket,ns) { 
    return function(msg) {//we return a callback function 
     if(ns==="blabla") { 
     console.log("Disconnected from blabla"); 
     socket.broadcast.send("It works! on blabla"); 
     } 
     . 
     . 
     . 
    } 
    }; 

Sie können dann mehrere Trennungsverhalten erstellen, die auf dem Namespace basiert, hoffe, es hilft.

Bitte lassen Sie mich wissen, wenn Sie etwas brauchen, sonst :-)

Verwandte Themen