首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为事件分配函数

为事件分配函数
EN

Stack Overflow用户
提问于 2016-06-08 00:25:04
回答 1查看 122关注 0票数 2

我有一个类,它有一个函数,我想为dgram obj指定一个事件。

代码语言:javascript
复制
MessageServer.prototype.OnBind = function (datagram) {
    var address = datagram.address();
    console.log("server listening " + address.address + ":" + address.port);
};

datagram.on("listening",
    function() {
        OnBind(this);
    });

我试过:

  • 上面没有定义OnBind的
  • this.OnBind,它没有定义b/c --这是指dgram
  • MessageServer.OnBind,它不是一个函数
  • Datagram.on(“侦听”,this.OnBind);但它不会在dgram中传递
  • Datagram.on(“侦听”,this.OnBind(this));但在MessageServer中传递

我猜这很简单,我只是很难.如何将函数分配给该事件处理程序?

编辑-完整模块

代码语言:javascript
复制
var Dgram = require("dgram");
var MessageQueue = require("./MessageQueue");
var Message = require("./Message");

function MessageServer(name, listenPort, messageQueue, bindCallBack, messageReceiveCallBack,closeCallback,errorCallback) {
    this.Name = name;
    this.MessageQueue = messageQueue;
    this.Port = listenPort;
    var datagram = Dgram.createSocket("udp4");
    MessageServer.prototype.Bind = function() {
        datagram.bind(this.Port);
    };
    MessageServer.prototype.OnReceive = function(message, info) {
        var msg = new Message(message, info.address, info.port);
        MessageQueue.Add(msg);
    };

    MessageServer.prototype.OnBind = function (datagram) {
        var address = datagram.address();
        console.log("server listening " + address.address + ":" + address.port);
    };

    datagram.on("listening",this.OnBind(datagram));
    datagram.on("message",
        function(msg,info) {
            OnReceive(msg, info);
        });
    datagram.on("error", function(err) {
        console.log(this.Name + " error: " + error);
    });
    datagram.on("close", function() {
        console.log("server closing: " + Name);
    }); 
    }

module.exports = MessageServer;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 00:30:27

您的代码中有几个问题,请使用文档作为参考,稍微清理一下。

见此处:https://nodejs.org/api/dgram.html

完全脱离了袖口,未经测试就偏离了航线。但它应该让你知道从哪里开始,我想。

MessageServer是这里的一个类,在它的方法中实现您的逻辑。然后实例化它并调用Bind启动它。

(在这个界面上可能还有一些改进的余地)

代码语言:javascript
复制
var myMessageServer = new MessageServer('MyServer', 8888, new MessageQueue(), etc...);
myMessageServer.Bind();

-

代码语言:javascript
复制
var Dgram = require("dgram");
var Message = require("./Message");

function MessageServer(name, listenPort, messageQueue, bindCallBack, messageReceiveCallBack, closeCallback, errorCallback) {
    this.name = name;
    this.messageQueue = messageQueue;
    this.port = listenPort;
    this.server = Dgram.createSocket("udp4");

    this.server.on("listening", this.OnBind.bind(this));
    this.server.on("message", this.OnReceive.bind(this));
    this.server.on("error", function (err) {
        console.log(this.name + " error: " + error);
        this.server.close();
    }.bind(this));
    this.server.on("close", function () {
        console.log("server closing: " + name);
    });
}

MessageServer.prototype.Bind = function () {
    this.server.bind(this.port);
};
MessageServer.prototype.OnReceive = function (message, info) {
    var msg = new Message(message, info.address, info.port);
    this.messageQueue.Add(msg);
};

MessageServer.prototype.OnBind = function () {
    var address = this.server.address();
    console.log("server listening " + address.address + ":" + address.port);
};

module.exports = MessageServer;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37691497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档