Hallo,
so da bin ich mit meinem laufendem Server wieder =)
klappt alles bis dahin wie ich es gerne hätte was das user handling angeht aber nun bin ich bei dem Thema der Zielgerichteten emits...
ein Fehler taucht nicht auf, auch in putty erhalte ich die Ausgabe das er zu dem user sendet nur ankommen tut nichts =(
Wäre dir da echt Dankbar wenn Du mich auf nen Fehler hinweisen würdest.
Das nachstehende Thema sind dann die räume auf socket ebene, ich würde gerne mit der Webseite eindeutige ID,s für gurppenchats anlegen so das ich dan mit meinem Clienthandler bei bedarf nen user in einen Raum adden kann und die socket Funktion nutzten um an alle listner zu senden.
Mit meinem handler könnte ich es auch realisieren, würde aber deutlich umständlicher sein da ich per foreach() alle listener abarbeiten würde und persönliche emit schicken, da sollte ich also doch lieber die Funktionen von socket.io nutzten.
MFG: Paykoman
::EDIT:: Nun jetzt haut er mir doch ne Fehlermeldung raus, die bringt uns aber nicht weiter ma müssten erstmal einen errorhanlder definieren, hab aber kein Schimmer wie =(
hab auch schon nach "Missing error handler on `socket`." gegoogelt aber nichts hilfreiches gefunden =(
so da bin ich mit meinem laufendem Server wieder =)
Code:
var server = require('http').createServer();
var io = require('socket.io').listen('8080'),
mysql = require("mysql"),
squel = require("squel"),
memcache = require("memcache");
//client = require('socket.io-client');
// memcache Verbindung herstellen
var cache = new memcache.Client(11211, "localhost");
cache.connect();
// lobby.clients.{uid}
var lobby = new function(){
this.clients={}; // user instanzen werden hier in die user php-uid abgelegt welche auch als index genutzt wird
this.sid={}; // hier gilt die socket.id als index und enthält jeweils die php-uid
this.gChats={}; // hier listen wir aktive gruppen chats bzw. nur die user einer gruppe die online sind um an diese auszuliefern
this.cnt = '';
this.addClient = function(data, socketID, sessID)
{
var userData = JSON.parse(data);
if( userData.sid != '' ) // check of exist socket-id
{
this.updateSid(userData.sid, socketID, userData.uid); // update session to new socket-ID
userData.sid = socketID;
userData.sessKey = sessID; // muss für die js-Instanz wieder hinzugefügt werden
userData.lastAct = new Date().toString(); // muss für die js-Instanz wieder hinzugefügt werden
this.clients[userData.uid] = userData;
}
else // der user hat noch keine sid, er ist also das erste mal in der session mit socket verbunden
{
userData.sid = socketID;
userData.sessKey = sessID;
userData.lastAct = new Date().toString();
this.clients[userData.uid] = userData;
this.sid[socketID] = userData.uid;
}
// php-sess updaten, nach jedem lobby.addClient
delete userData.sessKey; // will not need on php-sess
delete userData.lastAct; // will not need on php-sess
cache.set('socketSess/'+sessID, JSON.stringify(userData), function(err, response) { /** Schreibvorgang kann hier geprüft werden */ });
//console.log( 'user added: '+JSON.stringify(userData) );
}
this.updateSid = function(oldSid, newSid, uid)
{
delete this.sid[oldSid]; // rem old socket.id from sid list
this.sid[newSid] = uid; // set new socket.id and add the owner
}
this.remClient = function(socketID)
{
var uid = this.sid[socketID];
console.log('remClient: '+ uid);
console.log('remSid: '+ socketID);
delete this.clients[uid]; // remove client
delete this.sid[socketID]; // remove sid
}
this.addToGchat = function(userData)
{
// hier kommt später das zeug den user in ein gruppen chat hinzuzufügen
}
};
// Create a Socket.IO instance, passing it our server
var socket = io.listen(server);
socket = socket.of('/root'); // set namespace
socket.on('connection', function(socket, error)
{
socket.on('auth', function(sessID, error)
{
// auth erfolgt via memcache über die abzurufende session
cache.get('socketSess/'+decodeURIComponent(sessID), function(error, result)
{
if( typeof(error)==="undefined" ) // ist ein memcache error aufgetretten erfolgt kein user.add
{
if( typeof(result)!=="undefined" && result != null ) // kein error nun prüfe die erhaltenen Daten
{
lobby.addClient( result, socket.id, sessID ); // sende json string und sid + sessID an die addClient funktion
}
else{ console.log('no PHP-session found'); } // erhaltene session war fehlerhaft, abbruch!
}else{
console.log("error : "+error);
}
});
});
socket.on('disconnect', function(sessID){
lobby.remClient( socket.id );
});
socket.on('stefClick', function(data)
{
var empfaenger = lobby.clients[1]['sid'];
console.log('sende msg to: '+ empfaenger);
//io.sockets.connected[empfaenger].emit("testReceive", "Ich klicke du empfängst!");
io.sockets.of('/root').connected[empfaenger].emit("testReceive", {msg: "Ich klicke du empfängst!"} );
});
});
console.log('Juhu Server running');
klappt alles bis dahin wie ich es gerne hätte was das user handling angeht aber nun bin ich bei dem Thema der Zielgerichteten emits...
Code:
socket.on('stefClick', function(data)
{
var empfaenger = lobby.clients[1]['sid'];
console.log('sende msg to: '+ empfaenger);
//io.sockets.connected[empfaenger].emit("testReceive", "Ich klicke du empfängst!");
io.sockets.of('/root').connected[empfaenger].emit("testReceive", {msg: "Ich klicke du empfängst!"} );
});
ein Fehler taucht nicht auf, auch in putty erhalte ich die Ausgabe das er zu dem user sendet nur ankommen tut nichts =(
Wäre dir da echt Dankbar wenn Du mich auf nen Fehler hinweisen würdest.
Das nachstehende Thema sind dann die räume auf socket ebene, ich würde gerne mit der Webseite eindeutige ID,s für gurppenchats anlegen so das ich dan mit meinem Clienthandler bei bedarf nen user in einen Raum adden kann und die socket Funktion nutzten um an alle listner zu senden.
Mit meinem handler könnte ich es auch realisieren, würde aber deutlich umständlicher sein da ich per foreach() alle listener abarbeiten würde und persönliche emit schicken, da sollte ich also doch lieber die Funktionen von socket.io nutzten.
MFG: Paykoman
::EDIT:: Nun jetzt haut er mir doch ne Fehlermeldung raus, die bringt uns aber nicht weiter ma müssten erstmal einen errorhanlder definieren, hab aber kein Schimmer wie =(
Code:
Missing error handler on `socket`.
TypeError: undefined is not a function
at Socket.<anonymous> (/home/wposrv/socket/node_modules/socket.io/lib/app.js:127:14)
at Socket.emit (events.js:107:17)
at Socket.onevent (/home/wposrv/socket/node_modules/socket.io/lib/socket.js:330:8)
at Socket.onpacket (/home/wposrv/socket/node_modules/socket.io/lib/socket.js:290:12)
at Client.ondecoded (/home/wposrv/socket/node_modules/socket.io/lib/client.js:193:14)
at Decoder.Emitter.emit (/home/wposrv/socket/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/index.js:134:20)
at Decoder.add (/home/wposrv/socket/node_modules/socket.io/node_modules/socket.io-parser/index.js:247:12)
at Client.ondata (/home/wposrv/socket/node_modules/socket.io/lib/client.js:175:18)
at Socket.emit (events.js:107:17)
at Socket.onPacket (/home/wposrv/socket/node_modules/socket.io/node_modules/engine.io/lib/socket.js:99:14)
hab auch schon nach "Missing error handler on `socket`." gegoogelt aber nichts hilfreiches gefunden =(
Zuletzt bearbeitet: