Ich habe einige Probleme mit den Handshake-Daten in meiner angularjs/ionic-Anwendung, wenn ich einen Benutzer wieder mit meiner socket.io Quiz-Anwendung verbinde.Update socket.io Handshake-Daten bei Verwendung von angular factory
Ich möchte die Handshake-Daten, die ich vom Client bei der Verbindung zu meinem Server sende, aktualisieren, wenn ein Benutzer trennt und dann wieder verbindet. (Ich brauche einige Daten in der Handshake, da der Server überprüft, ob der Benutzer zum ersten Mal beitritt, oder gerade verlor ihre Verbindung mit dem Quiz)
Mein Problem/was jetzt passiert:
- Ein Benutzer möchte mit id-Quiz teilnehmen "12345"
- der Benutzer mit dem Server verbunden, Handshake-Daten zu senden:
{user_id: 1, quiz_code: 12345}
- Server fügt dann der Benutzer "1" Quiz-Nummer "12345"
- Wenn das Quiz endet, verwendet der Benutzer io.disconnect() und verlässt das Quiz
- Der Benutzer entscheidet sich nun, das Quiz "66666"
- Jetzt die Socket Factory scheint sich an den alten Handshake erinnern.
- Also, wenn der Client mit dem Server verbinden es
{user_id: 1, quiz_code: 12345}
sendet aber sollte{user_id: 1, quiz_code: 66666}
Mein Angularjs-Controller
.controller('QuizCtrl', function(SocketService) {
$scope.$on('$ionicView.enter', function(e) {
//this seems to be the problem -> it reuses the old data in the factory
SocketService.connect();
});
$scope.$on('$ionicView.leave', function(e) {
SocketService.removeListener();
SocketService.disconnect();
});
});
My Angularjs Buchse Fabrik senden
.factory('SocketService', function(socketFactory){
var data = {
activeQuiz : {quiz_code: 12345, quiz_ip: some.ip},
currentUser : {user_id: 1}
};
//This data is loaded from localStorage in the application, so it can be changed
var myIoSocket = io.connect(data.activeQuiz.ip, {query: 'user_id='+data.currentUser.user_id+'&quiz_code='+data.activeQuiz.quiz_code});
mySocket = socketFactory({
ioSocket: myIoSocket
});
return mySocket;
})
Also 3 questio ns:
- Ich weiß, Fabriken sind Singletons, aber kann ich die Daten in meiner Fabrik aktualisieren?
- Kann ich das Werk zu meinem Controller "neu einspritzen" oder das Werk "zurücksetzen", wenn der Benutzer den Controller betritt.
- Gibt es einen besseren Weg, es vielleicht zu tun?
Danke! Genau was ich brauchte ... – OngoBoingo
Wie wenn ich Abfrageparameter unter Verwendung der Daten von der Datenbank einfügen möchte? Ich benutze $ http.get, um die Daten zu erhalten, aber der Socket-Rückgabewert wartet nicht auf die zu ladenden Daten ... –