Функционал событий в классе javascript - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь создать библиотеку, которая обеспечивает простой коммуникационный уровень для Tabris. js WebSockets и node.js ws модуль. Пока все работает. Я не уверен, правильно ли я поступаю, но вот что у меня есть для создания соединения.

клиент. js

const Apollo = require('Apollo').ApolloClient;

const apollo = new Apollo();

apollo.onConnection(client => {
    console.log('right here i would like to add something')
    //something like client.on(event, function() => {} )
})

сервер. js

const Apollo = require('Apollo').ApolloServer;

const apollo = new Apollo(4343);

apollo.onConnection()

Apollo. js

const WebSocket = require('ws');
//const WebSocket = require('./node_modules/ws')

class ApolloServer{
    constructor(port){
        console.log(port)
        this.port = 4343;
        if(port){
            this.port = port;
        }
        this.wss = new WebSocket.Server({ port: this.port },function(){
            console.log('started websocket server on port: ' + this.port )
        });
    }

    onConnection(){
        return new Promise(resolve => {
            this.wss.on('connection', function connection(ws) {
                console.log("ONCONNECTION")
                this.ws = ws;
                resolve(true)
            })
        })
    }

    on(){
        this.ws.on('message', function incoming(message) {
            console.log(message)
        })
    }

}

class ApolloClient{
    constructor(host){
        this.host = "ws://127.0.0.1:4343"
        if(host){
            this.host = host
        }
        this.socket = new WebSocket(this.host, 'chat-protocol');
        console.log('client')
    }


    on_connection(){
        return new Promise(resolve => {
            this.socket.onopen = function(event) {
                console.log('ONCONNECTION')
                resolve(true)
            }
        })
    }

    onConnection(_function){
        console.log(_function)
        this.on_connection().then(resolve => {
            console.log('connection')
            _function()
        })
    }

    //on(this, do this)
    on(event, _function){

    }

}


module.exports.ApolloServer = ApolloServer;
module.exports.ApolloClient = ApolloClient

моя основная цель - добавить оболочку почти как socket.io. Я не уверен, как будет работать что-то вроде client.on (event, function ()). apollo.onConnection() для клиента, ожидающего установления соединения, пока он не выполнит переданную функцию, но я не знаю, как сделать это там, где функция будет запускаться после сравнения события, полученного от сервера

...