0

Node.JS を使用してサーバー/クライアント モデルを構築しており、変数のパケット ID を使用して既にインスタンス化されたクラスの関数を呼び出し、着信サーバー パケットをさまざまな関数で処理したいと考えています。したがって、PacketMethodsオブジェクトのプロパティとしてパケット ID を配置し、各パケット ID プロパティの値として呼び出す関数を配置します。ただし、この例では、 が呼び出されたときに、開始されたクラスServerList()のメンバーではないため、未定義です。Clientthis.socket

のメンバーになるように、パケット処理関数を呼び出すにはどうすればよいClientですか?

function Client (...)
{
  this.socket = new net.Socket();

  ...
}

Client.prototype.HandlePacket = function(blocks)
{
  try {
    var sPacket = new WRPacket(blocks);
    var PacketMethods = {
      4352 : this.ServerList
      4351 : this.LoginResponse
    }

    if(PacketMethods.hasOwnProperty(sPacket._packetid))
      PacketMethods[sPacket._packetid](sPacket);
    else
      console.log('Unhandled Packet: '+sPacket._packetid);
    } catch(err) {
      console.log("Error at Packet-Handler:\n"+err);
  }
}

Client.prototype.ServerList = function(Packet) 
{
  console.log('Serverlist received ...');
  ...
  this.socket.end();
}

ありがとうございました!

4

2 に答える 2

1

を使用しPacketMethodsてメソッドの名前を保存し、正しいコンテキストで呼び出すことができます。

var PacketMethods = {
    4352 : 'ServerList'
    4351 : 'LoginResponse'
};

if (PacketMethods.hasOwnProperty(sPacket._packetid)) {
    var method = PacketMethods[sPacket._packetid];
    this[method](sPacket);
}
于 2013-07-24T21:05:04.320 に答える