Skip to content

3.3.Anwendungslogik_Dienstnutzer

jkimmeyer edited this page Sep 6, 2016 · 1 revision

###3.3) Funktionen des Dienstnutzers

####3.3.1) Listener Sobald eine Socket-Verbindung besteht stehen dem socket folgende Methoden zu Verfügung. Diese kann er über socket.emit('listenername', data) erreichen.

Beispiele:

/* ClientSocket der Socket-Liste hinzufügen*/
clientSockets.push(socket);
console.log('Verbindung mit Webapp hergestellt!');

/*Senden der Daten*/
socket.on('getSongs', function(){
	sendSongs(socket);
});

/*Verarbeite Daten*/
socket.on('postSong', function(data){
	postSong(socket, data);
});

3.3.1.1 Beispiel Listener

####3.3.2) Interne Funktionen Durch die dargestellten Listener werden Funktionen ausgeführt, die die Daten an View und Service senden.

function sendSongs(socket) {
	var options = {
			host: 'localhost',
			port: 3000,
			path: '/api/songs',
			method: 'GET',
			headers: {
				accept: 'application/json'
			}
	};

	var externalRequest = http.request(options, function(externalResponse){
		console.log('Verbindung mit Webservice hergestellt!');
		externalResponse.on('data', function(chunk){
			var songdata = JSON.parse(chunk);
			socket.emit("resSongs",songdata);
		});
	});
	externalRequest.end();
}

function postSong(socket, data) {
 var options = {
		 host: 'localhost',
		 port: 3000,
		 path: '/api/songs',
		 method: 'POST',
		 headers: {
			 "content-type": "application/json",
		 }
 };

 var externalRequest = http.request(options, function(externalResponse){
	 console.log('Verbindung mit Webservice hergestellt!');
	 externalResponse.setEncoding('utf8');
	 if (externalResponse.statusCode == 201) {
		 externalResponse.on('data', function(chunk){
			 var chunkdata = JSON.parse(chunk);
			 sendMeldung(socket, "Song hinzugefügt");

			 /*jedem Client die neue Queue senden*/
			 clientSockets.forEach(function(clientSocket) {
				 sendSongs(clientSocket);
			 });
		 });
	 }
	 else sendMeldung(socket, "Fehler: "+externalResponse.statusCode);
	 externalResponse.on('error', function(e) {
		 sendMeldung(socket, "Error: "+e);
	 });
 });
 externalRequest.write('{"title": "'+data.title+'", "artist": '+data.artistID+', "genre": '+data.genreID+' }');
 externalRequest.end();
}

3.3.3.2 Beispiel interne Funktionen

In den Funktionen wird zum Aufbau der HTTP Verbindungen zum REST Service das node-Package "HTTP" verwendet. Beim Aufruf auf eine Ressource wird der übermittelte HTTP Status Code überprüft. Entspricht er der Entwartung, wird eine Erfolgsmeldung an die View geschickt und mit einem "Toast" eingeblendet. Parallel wird die gewünschte Aktion ausgeführt und auf allen Sockets synchronisiert. Falls der Code abweicht wird der Code als Antwort übermittelt.

Clone this wiki locally