1

ボタンクリックでクライアントからサーバーに簡単なメッセージを送信しようとしています。

編集: index.jade が読み込まれると、次のコードを使用して socket.io オブジェクトを作成し、それを my に転送します。Menu_Contollerこれにより、socket オブジェクトがに割り当てられますMenu_Model。関数が呼び出されるたびにSendOptionSelectedToServerMenu_Model.jssocket オブジェクトを使用してこの関数の値は正しいです。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

クライアント側でイベントを呼び出さないのはなぜですか?

4

0 に答える 0