添加websocket使用demo

This commit is contained in:
leo
2018-07-17 00:58:02 +08:00
parent 49d23c9945
commit b7799a0c42
56 changed files with 26154 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
module.exports = Emitter;
/**
* Initialize a new `Emitter`.
*
* @api public
*/
function Emitter(obj) {
if (obj) return mixin(obj);
}
/**
将Emitter.prototype里面的所有属性都整合到obj
*/
function mixin(obj) {
for (var key in Emitter.prototype) {
obj[key] = Emitter.prototype[key];
}
return obj;
}
/**
添加监听事件
*/
Emitter.prototype.on =
Emitter.prototype.addEventListener = function (event, fn, context) {
this._callbacks = this._callbacks || {};
let callBack = fn;
if (arguments.length == 3) {
callBack = function (data) {
console.log(data, arguments);
fn.apply(context, arguments);
}
callBack.fn = fn;
}
(this._callbacks[event] = this._callbacks[event] || [])
.push(callBack);
return this;
};
/**
添加事件,该事件只被触发一次,触发后会被移除
*/
Emitter.prototype.once = function (event, fn, context) {
var self = this;
this._callbacks = this._callbacks || {};
function on() {
self.off(event, on);
if (arguments.length == 3) {
fn.apply(context, arguments);
} else {
fn(arguments);
}
}
on.fn = fn;
this.on(event, on);
return this;
};
/**
移除监听事件,当不传参数时,所有事件都会被移除
*/
Emitter.prototype.off =
Emitter.prototype.removeListener =
Emitter.prototype.removeAllListeners =
Emitter.prototype.removeEventListener = function (event, fn) {
this._callbacks = this._callbacks || {};
// all
if (0 == arguments.length) {
this._callbacks = {};
return this;
}
// specific event
var callbacks = this._callbacks[event];
if (!callbacks) return this;
// remove all handlers
if (1 == arguments.length) {
delete this._callbacks[event];
return this;
}
// remove specific handler
var cb;
for (var i = 0; i < callbacks.length; i++) {
cb = callbacks[i];
if (cb === fn || cb.fn === fn) {
callbacks.splice(i, 1);
break;
}
}
return this;
};
/**
发送事件,当发送该事件时会触发相应的监听的回调函数
*/
Emitter.prototype.emit = function (event) {
this._callbacks = this._callbacks || {};
var args = [].slice.call(arguments, 1)
, callbacks = this._callbacks[event];
if (callbacks) {
callbacks = callbacks.slice(0);
for (var i = 0, len = callbacks.length; i < len; ++i) {
// callbacks[i].apply(this, args);
callbacks[i](args);
}
}
return this;
};
/**
返回所有监听事件
*/
Emitter.prototype.listeners = function (event) {
this._callbacks = this._callbacks || {};
return this._callbacks[event] || [];
};
/**
返回监听事件的个数
*/
Emitter.prototype.hasListeners = function (event) {
return !!this.listeners(event).length;
};

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "ae98cfb0-32ac-49d9-bd1a-2c7abd36ab1b",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@@ -0,0 +1,48 @@
const net = require('net');
const Emitter = require('./Emitter');
const emitter = new Emitter();
cc.Class({
extends: cc.Component,
properties: {
label: {
default: null,
type: cc.Label
},
// defaults, set visually when attaching this script to the Canvas
text: 'Hello, World!'
},
// use this for initialization
onLoad: function () {
this.label.string = this.text;
this.net = net;
this.net.connect();
this.net.addHandler('test_pust', (data) => {
console.log('test_pust', data);
});
this.net.send('test_pust', 'hello');
emitter.on('test_1', this.onTest_1, this);
emitter.on('test_2', this.onTest_2);
emitter.emit('test_1', 1, 1, 1);
emitter.emit('test_2', 1, 1, 1);
},
onTest_1(data) {
console.log('onTest_1 data', arguments, this);
},
onTest_2(data) {
console.log('onTest_2 data', data, this);
console.log(arguments);
},
// called every frame
update: function (dt) {
},
});

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "280c3aec-6492-4a9d-9f51-a9b00b570b4a",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@@ -0,0 +1,100 @@
import { parse } from "path";
import { eventNames } from "cluster";
let netConfig = {};
netConfig.host = 'localhost';
netConfig.port = '8181';
var NetControl = {
_sock: {}, //当前的webSocket的对象
sendTempArr: [],//发送数组
handlers: [],//
connect() {
if (this._sock.readyState !== 1) {
//重新连接
this._sock = new WebSocket('ws://' + netConfig.host + ":" + netConfig.port);
this._sock.onopen = this._onOpen.bind(this);
this._sock.onclose = this._onClose.bind(this);
this._sock.onmessage = this._onMessage.bind(this);
}
return this;
},
_onOpen() {
console.log('_onOpen');
this.sendTempArr.forEach((msg) => {
console.log('_onOpen ,send ');
this._send(msg);
});
},
_onClose(err) {
console.log('_onClose', err);
},
_onMessage(obj) {
console.log('_onMessage', obj.data, obj);
let event = JSON.parse(obj.data);
let handler = this.handlers[event.event];
if (handler) {
handler(event.data);
}
},
_send(msg) {
try {
this._sock.send(msg);
} catch (error) {
console.log('_send error=', error);
}
},
send(event, data) {
let newData = JSON.stringify({ event: event, data: data });
//是否能发送
if (this._sock.readyState !== 1) {
console.log('sendTempArr');
this.sendTempArr.push(newData);
return;
}
this._send(newData);
},
/**
* 同一事件,只会注册一次。
* 如果出现多个,只回调第一个
* @param {*} event
* @param {*} fn
*/
addHandler(event, fn) {
console.log('addHandler',event);
if (this.handlers[event]) {
console.log("event:" + event + "' handler has been registered.");
return;
}
var handler = function (data) {
//console.log(event + "(" + typeof(data) + "):" + (data? data.toString():"null"));
fn(data);
};
this.handlers[event] = handler;
},
removeHandler(event) {
console.log('removeHandler',event);
let handler = this.handlers[event];
if (handler) {
handler = null;
}
},
removeAllHandler() {
console.log('removeAllHandler',event);
this.handlers = {};
},
};
module.exports = NetControl;

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.5",
"uuid": "78d9382a-07c1-4ae5-9125-4d1304460ea7",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}