ボタンクリックでクライアントからサーバーに簡単なメッセージを送信しようとしています。
編集:
index.jade が読み込まれると、次のコードを使用して socket.io オブジェクトを作成し、それを my に転送します。Menu_Contoller
これにより、socket オブジェクトがに割り当てられますMenu_Model
。関数が呼び出されるたびにSendOptionSelectedToServer
、Menu_Model.js
socket オブジェクトを使用してこの関数の値は正しいです。Menu_Model
なぜそうでないのかわかりませんemitting
。
index.jade
script(src = '/socket.io/socket.io.js')
script(src = '/javascripts/Menu_Controller.js')
script(src = '/javascripts/Menu_Model.js')
script
var socket = io.connect('http://localhost:3000');
socket.emit('GameType','chutia');
var Menu_Control = Object.create(Menu_Controller);
Menu_Control.Init(socket);
Menu_Controller.js
var Menu_Controller = {
Model : null,
Init:function(socket)
{
this.Model = Object.create(Menu_Model);
this.Model.Init(socket,this);
},
SendOptionSelectedToServer:function(option) <-- called from a view menu which we don't have to care about because value in 'option' are correct.
{
this.Model.SendOptionSelectedToServer(option);
}
};
Menu_Model.js
var Menu_Model = {
Socket : null,
Controller : null,
Init:function(sock,controllerRef)
{
this.Socket = sock;
this.Controller = controllerRef;
},
SendOptionSelectedToServer:function(option)
{
this.Socket.emit(option.type,option.ghostName); <-- this line.
}
};
これがapp.jsの完全なサーバー側コードです。
var express = require('express')
, http = require('http')
, routes = require('./routes')
, io = require('socket.io')
, factory = require('./serverfactory.js');
var app = express();
var server = app.listen(3000);
io = io.listen(server);
io.sockets.on('connection',function(socket){
console.log('new user'); <-- this is printed in the log.
socket.on('GameType',function(msg){
console.log(msg); <-- but this is not.
});
});
//var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', routes.index);
新しい接続が発生するとnew user
、ログに書き込まれます。ただし、クライアント側から呼び出しが行われるemit
と、コンソールにメッセージは書き込まれません。クライアント側でパラメーターを確認しましたが、それらは正しいです。option.type
クライアント側の には が含まれますGameType
。
クライアント側でイベントを呼び出さないのはなぜですか?