mirror of
https://github.com/Leo501/CocosCreatorTutorial.git
synced 2026-06-20 18:16:05 +08:00
添加websocket使用demo
This commit is contained in:
140
Websocket/assets/Script/Emitter.js
Normal file
140
Websocket/assets/Script/Emitter.js
Normal 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;
|
||||
};
|
||||
9
Websocket/assets/Script/Emitter.js.meta
Normal file
9
Websocket/assets/Script/Emitter.js.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.0.5",
|
||||
"uuid": "ae98cfb0-32ac-49d9-bd1a-2c7abd36ab1b",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
||||
48
Websocket/assets/Script/HelloWorld.js
Normal file
48
Websocket/assets/Script/HelloWorld.js
Normal 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) {
|
||||
|
||||
},
|
||||
});
|
||||
9
Websocket/assets/Script/HelloWorld.js.meta
Normal file
9
Websocket/assets/Script/HelloWorld.js.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.0.5",
|
||||
"uuid": "280c3aec-6492-4a9d-9f51-a9b00b570b4a",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
||||
100
Websocket/assets/Script/net.js
Normal file
100
Websocket/assets/Script/net.js
Normal 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;
|
||||
9
Websocket/assets/Script/net.js.meta
Normal file
9
Websocket/assets/Script/net.js.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.0.5",
|
||||
"uuid": "78d9382a-07c1-4ae5-9125-4d1304460ea7",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
||||
Reference in New Issue
Block a user