Voor een PoC probeer ik in NodeJS icm WebSocket.io een WebSockets communicatielaagje te maken. Dat is gelukt, en nu probeer ik de socket in een object te plaatsen aan de NodeJS kant. En nu loop ik tegen mijn gebrekkige kennis aan van Javascript.
Ik probeer de verbonden socket in een OO-structuur te hebben, en elk ontvangen bericht meteen weer terug te sturen. En dat lukt dus niet. Op regel 37 probeer ik het terug te sturen, maar daar zit ik in de verkeerde scope. Ook door het herschrijven van code (poging helemaal onderop) is het niet gelukt, door een andere foutmelding.
Poging #2 faalt met runtime foutmelding throw new Error('addListener only takes instances of Function');:
Hoe kan ik toch een callback hebben voor socket.on('message', this.handlemessage); , én weten vanaf welke socket deze is binnengekomen en via die socket ook een bericht terugsturen?
Ik probeer de verbonden socket in een OO-structuur te hebben, en elk ontvangen bericht meteen weer terug te sturen. En dat lukt dus niet. Op regel 37 probeer ik het terug te sturen, maar daar zit ik in de verkeerde scope. Ook door het herschrijven van code (poging helemaal onderop) is het niet gelukt, door een andere foutmelding.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| var ws = require('websocket.io') , http = require('http').createServer(httpRequest).listen(3000) , server = ws.attach(http) console.log("Running WebSocket.io version " + ws.version); function httpRequest(req, res) { res.writeHead(200, { 'Content-Type':'text/plain' }); res.end('Hello. This is a WEBSOCKETS server. Please connect with a websockets client.'); } server.on('connection', function (socket) { var client = new ConnectedClient(socket) client.sendMessage("Hello. Welcome to websockets"); }); function ConnectedClient(_socket) { var socket = _socket; socket.on('error', function (error){ console.log(error); }); socket.on('message', function (message) { try{ var obj = JSON.parse(message); if(obj.version == undefined) { console.log("Received invalid data: "+ message + ". Cannot continue"); return ; } console.log('Received data: '+obj.data + ' for app '+ obj.app); this.sendMessage(obj.data); // Error receive:TypeError: Object #<WebSocket> has no method 'sendMessage' } catch(err) { console.log("Error receive:" + err); } }); socket.on('close', function() { console.log("Client disconnected"); }); this.sendMessage = function (data) { var message = JSON.stringify({ "version" : 1.0, "app": 'app', "data": data }); socket.send(message); } } |
Poging #2 faalt met runtime foutmelding throw new Error('addListener only takes instances of Function');:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| socket.on('message', this.handlemessage); this.handlemessage = function (message) { try{ var obj = JSON.parse(message); if(obj.version == undefined) { console.log("Received invalid data: "+ message + ". Cannot continue"); return ; } console.log('Received data: '+obj.data + ' for app '+ obj.app); this.sendMessage(obj.data); // Error receive:TypeError: Object #<WebSocket> has no method 'sendMessage' } catch(err) { console.log("Error receive:" + err); } }; |
Hoe kan ik toch een callback hebben voor socket.on('message', this.handlemessage); , én weten vanaf welke socket deze is binnengekomen en via die socket ook een bericht terugsturen?