Nodejs e webSockets, acionando eventos?
Eu sou novo nisso, criei um aplicativo de bate-papo na web padrão e vejo o poder do nodejs, express, socket.io.
O que estou tentando fazer é acionar eventos de um telefone para um site, como um controle remoto. Há um javascript do servidor que escuta eventos do cliente e um javascript do cliente que aciona esses eventos; é assim que eu entendo que ele me corrige se estiver errado.
Aprendi no aplicativo de bate-papo que posso enviar um objeto de qualquer lugar, desde que estejam conectados ao meu servidor por uma porta específicahttp://my-server-ip:3000/
. Basicamente, todos os eventos estão dentro da página de índice e a conexão éindex
paraserver
paraindex
.
O que estou tentando aprender é como acionar eventos de uma página externa. Vi coisas comohttp://my-server-ip:3000/ws
ou algo assim, a idéia é conectar-se a uma interface móvel que não seja o próprio índice ou site em si, mas essa interface se comunica com o servidor do nó usando-o como despachante para acionar eventos na página de índice principal.
Basicamente, o que eu aprendi foiindex
paraserver
paraindex
. Não sei como posso ircustom-page
paraserver
paraindex
.
Vejo que no meu app.js, meu entendimento é que o soquete escutasends
que está no cliente, emite a mensagem.
io.sockets.on('connection', function (socket) {
socket.on('sends', function (data) {
io.sockets.emit('message', data);
});
});
Tentei criar um test.html com um botão, tentei ouvi-lo, aqui está uma captura de tela.
Aqui está o meu código de cliente
window.onload = function() {
var messages = [];
var socket = io.connect('http://my-server-ip:3000/');
var socketTwo = io.connect('http://my-server-ip:3000/test.html');
var field = document.getElementById("field");
var sendButton = document.getElementById("send");
var content = document.getElementById("content");
var name = document.getElementById("name");
var trigBtn = document.getElementById("trigger-btn");
socket.on('message', function (data) {
if(data.message) {
messages.push(data);
var html = '';
for(var i=0; i<messages.length; i++) {
html += '<b>' + (messages[i].username ? messages[i].username : 'Server') + ': </b>';
html += messages[i].message + '<br />';
}
content.innerHTML = html;
} else {
console.log("There is a problem:", data);
}
});
//FROM DEMO
// sendButton.onclick = sendMessage = function() {
//, if(name.value == "") {
// alert("Please type your name!");
// } else {
// var text = field.value;
// socket.emit('send', { message: text, username: name.value });
// field.value = "";
// }
// };
//I include this javascript with test.html and trigger
//this button trying to emit a message to socketTwo
trigBtn.onclick = sendMessage = function() {
socketTwo.emit('send', { message: 'String test here' })
}
}
Tenho certeza de que está tudo errado, mas espero que isso faça sentido e alguém possa me ajudar a acionar eventos de outra página acionada no índice.
Aqui está o código do servidor app.js
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, http = require('http');
var app = express();
var server = app.listen(3000);
var io = require('socket.io').listen(server); // this tells socket.io to use our express server
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.get('/', routes.index);
app.get('/test.html', function(req, res) {
res.send('Hello from route handler');
});
io.sockets.on('connection', function (socket) {
socket.emit('message', { message: 'welcome to the chat' });
socket.on('send', function (data) {
io.sockets.emit('message', data);
});
});
Todo o código postado acima está apenas testando o código do cortador de cookies, estou aprendendo do zero para que o acima possa ser totalmente alterado, está lá apenas como ponto de partida.