使用socket在节点js中调用函数

时间:2016-03-24 13:31:08

标签: javascript node.js sockets

我正在尝试调用在另一个“类”中创建的函数,我想在socket.on(...)中使用它,但它不起作用,它一直显示

this.function不是一个函数。

这是代码

//calling the function 

 Serveur.prototype.traitementSurConnection = function(socket) {
var that = this
    socket.on('connection', function (creator, typeArtifact,idConteneur, typeConteneur) {

        that.addArtifact('momo', 'img', 1,0);

    })
};

//the function

ZoneCollaborative.prototype.addArtifact = function(creator, typeArtifact,idConteneur, typeConteneur) {

    // calcul d'un nouvel identifiant

    var id = this.setIdAr();

    console.log('    *** ZC : calcul nouveau IdArtifact = '+id);


    // création de l'artifact

    var monArtifact = new Artifact(id, creator, typeArtifact, idConteneur,

            typeConteneur);

    console.log('    *** ZC : creation artifact'+monArtifact.getId() );

    // ajout à la liste

    this.artifacts.push(monArtifact);


    console.log('    *** ZC : total artifact ='+ this.artifacts.length);

};

1 个答案:

答案 0 :(得分:0)

这里是Serveur.js和ZoneCollaborative.js的完整代码

// Serveur.js

    var http = require('http');

var socket = require('socket.io');

var ZP = require('./ZonePartage');

var Constantes = require('./Constante');

//création des constantes

var CONSTANTE = new Constantes();

function Serveur(ZP, port) {

    this.ZP = ZP;

    this.port = port;

    console.log("    ---- Creation d'un serveur pour la ZP (" + ZP.getId()
            + ") sur le port " + port);

    var serveur = http.createServer(function(req, res) {

    });

    serveur.listen(this.port, function() {

        console.log('    ---- Server en ecoute sur port ' + port);

    });

    //

    var io = require('socket.io').listen(serveur);


    console.log('    ---- Socket en ecoute sur port ' + port);

    browser = require('iotdb-arp');// module qui s'occupe de la determination de l'adress MAC

    io.sockets.on('connection', (function(socket) {

        console.log('    ---- Socket connection');
        console.log('un utilisateur est connecté');

        browser.browser({}, function(error, d) {

            if (error) {

                console.log("#", error);

            } else if (d) {

                var adresse = d.ip;

                console.log('son adresse ip est ' + adresse); //obtenir l'adress ip de l'utilisateur connecté 

            }
        });

        socket.on('disconnect', function() {

            console.log(' ==> 1 utilisateur déconnecté <== '); //déconnection 
        });

        this.traitementSurConnection(socket);

    }).bind(this));

    console.log('    ---- Socket en attente de traitement port ' + port);
}

module.exports = Serveur;



Serveur.prototype.demandConnexion = function(idZEP) {

    if (this.ZP.createZE(idZEP))

    {

        console.log(' ==> socket : demande de creation ZE pour ' + idZEP
                + ' accepte');

    }

    else

    {

        console.log(' ==> socket : demande de creation ZE pour ' + idZEP
                + ' refuse');

    }

};

Serveur.prototype.traitementSurConnection = function(socket) {
    console.log(' ==> socket connexion');

    var self = this;
    socket.on('connection', function(creator, typeArtifact, idConteneur,
            typeConteneur) {

        self.addArtifact('momo', 'img', 1, 0);

    })

          }
    });

// ZoneCollaborative.js

ZoneCollaborative.prototype.addArtifact = function(creator, typeArtifact,idConteneur, typeConteneur) {



    // calcul d'un nouvel identifiant

    var id = this.setIdAr();

    console.log('    *** ZC : calcul nouveau IdArtifact = '+id);


    // création de l'artifact

    var monArtifact = new Artifact(id, creator, typeArtifact, idConteneur,

            typeConteneur);

    console.log('    *** ZC : creation artifact'+monArtifact.getId() );

    // ajout à la liste

    this.artifacts.push(monArtifact);


    console.log('    *** ZC : total artifact ='+ this.artifacts.length);

    };