• 在cocos creator 中使用websocket


    客户端

    参考:https://allknowboy.com/posts/e8f856f4/

    NetConfig.js

    /**
     * 当前的网络配置
     */
    module.exports={
        host:"ws://localhost",
        port:3000
    
    };

    NetControl.js

    /**
     * Created by Administrator on 2018/4/17 0017.
     */
    //定义全局的变量
    window.onfire=require("onfire");           //处理事件的类库
    var netConfig=require('NetConfig');
    var NetControl={
        _sock:{},  //当前的webSocket的对象
        connect: function () {
            if(this._sock.readyState!==1){
                //当前接口没有打开
                //重新连接
                this._sock = new WebSocket(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:function(){
            onfire.fire("onopen");
        },
        _onClose:function(err){
            onfire.fire("onclose",err);
        },
        _onMessage:function(obj){
    
            onfire.fire("onmessage",obj);
        },
    
        send:function(msg){
            this._sock.send(msg);
            console.log("send msg"+msg);
        },
    
    };
    
    module.exports=NetControl;

    onfire.js

    /**
     * Created by Administrator on 2018/4/17 0017.
     */
    /**
     Copyright (c) 2016 hustcc http://www.atool.org/
     License: MIT
     https://github.com/hustcc/onfire.js
     **/
    /* jshint expr: true */
    !function (root, factory) {
        if (typeof module === 'object' && module.exports)
            module.exports = factory();
        else
            root.onfire = factory();
    }(typeof window !== 'undefined' ? window : this, function () {
        var __onfireEvents = {},
            __cnt = 0, // evnet counter
            string_str = 'string',
            function_str = 'function',
            hasOwnKey = Function.call.bind(Object.hasOwnProperty),
            slice = Function.call.bind(Array.prototype.slice);
    
        function _bind(eventName, callback, is_one, context) {
            if (typeof eventName !== string_str || typeof callback !== function_str) {
                throw new Error('args: '+string_str+', '+function_str+'');
            }
            if (! hasOwnKey(__onfireEvents, eventName)) {
                __onfireEvents[eventName] = {};
            }
            __onfireEvents[eventName][++__cnt] = [callback, is_one, context];
    
            return [eventName, __cnt];
        }
        function _each(obj, callback) {
            for (var key in obj) {
                if (hasOwnKey(obj, key)) callback(key, obj[key]);
            }
        }
        /**
         *  onfire.on( event, func, context ) -> Object
         *  - event (String): The event name to subscribe / bind to
         *  - func (Function): The function to call when a new event is published / triggered
         *  Bind / subscribe the event name, and the callback function when event is triggered, will return an event Object
         **/
        function on(eventName, callback, context) {
            return _bind(eventName, callback, 0, context);
        }
        /**
         *  onfire.one( event, func, context ) -> Object
         *  - event (String): The event name to subscribe / bind to
         *  - func (Function): The function to call when a new event is published / triggered
         *  Bind / subscribe the event name, and the callback function when event is triggered only once(can be triggered for one time), will return an event Object
         **/
        function one(eventName, callback, context) {
            return _bind(eventName, callback, 1, context);
        }
        function _fire_func(eventName, args) {
            if (hasOwnKey(__onfireEvents, eventName)) {
                _each(__onfireEvents[eventName], function(key, item) {
                    item[0].apply(item[2], args); // do the function
                    if (item[1]) delete __onfireEvents[eventName][key]; // when is one, delete it after triggle
                });
            }
        }
        /**
         *  onfire.fire( event[, data1 [,data2] ... ] )
         *  - event (String): The event name to publish
         *  - data...: The data to pass to subscribers / callbacks
         *  Async Publishes / fires the the event, passing the data to it's subscribers / callbacks
         **/
        function fire(eventName) {
            // fire events
            var args = slice(arguments, 1);
            setTimeout(function () {
                _fire_func(eventName, args);
            });
        }
        /**
         *  onfire.fireSync( event[, data1 [,data2] ... ] )
         *  - event (String): The event name to publish
         *  - data...: The data to pass to subscribers / callbacks
         *  Sync Publishes / fires the the event, passing the data to it's subscribers / callbacks
         **/
        function fireSync(eventName) {
            _fire_func(eventName, slice(arguments, 1));
        }
        /**
         * onfire.un( event ) -> Boolean
         *  - event (String / Object): The message to publish
         * When passed a event Object, removes a specific subscription.
         * When passed event name String, removes all subscriptions for that event name(hierarchy)
         *
         * Unsubscribe / unbind an event or event object.
         *
         * Examples
         *
         *  // Example 1 - unsubscribing with a event object
         *  var event_object = onfire.on('my_event', myFunc);
         *  onfire.un(event_object);
         *
         *  // Example 2 - unsubscribing with a event name string
         *  onfire.un('my_event');
         **/
        function un(event) {
            var eventName, key, r = false, type = typeof event;
            if (type === string_str) {
                // cancel the event name if exist
                if (hasOwnKey(__onfireEvents, event)) {
                    delete __onfireEvents[event];
                    return true;
                }
                return false;
            }
            else if (type === 'object') {
                eventName = event[0];
                key = event[1];
                if (hasOwnKey(__onfireEvents, eventName) && hasOwnKey(__onfireEvents[eventName], key)) {
                    delete __onfireEvents[eventName][key];
                    return true;
                }
                // can not find this event, return false
                return false;
            }
            else if (type === function_str) {
                _each(__onfireEvents, function(key_1, item_1) {
                    _each(item_1, function(key_2, item_2) {
                        if (item_2[0] === event) {
                            delete __onfireEvents[key_1][key_2];
                            r = true;
                        }
                    });
                });
                return r;
            }
            return true;
        }
        /**
         *  onfire.clear()
         *  Clears all subscriptions
         **/
        function clear() {
            __onfireEvents = {};
        }
        return {
            on: on,
            one: one,
            un: un,
            fire: fire,
            fireSync: fireSync,
            clear: clear
        };
    });

    webSocket.js 

    // Learn cc.Class:
    //  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/class.html
    //  - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/class.html
    // Learn Attribute:
    //  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
    //  - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/reference/attributes.html
    // Learn life-cycle callbacks:
    //  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
    //  - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/life-cycle-callbacks.html
    
    cc.Class({
        extends: cc.Component,
    
        properties: {
            // foo: {
            //     // ATTRIBUTES:
            //     default: null,        // The default value will be used only when the component attaching
            //                           // to a node for the first time
            //     type: cc.SpriteFrame, // optional, default is typeof default
            //     serializable: true,   // optional, default is true
            // },
            // bar: {
            //     get () {
            //         return this._bar;
            //     },
            //     set (value) {
            //         this._bar = value;
            //     }
            // },
        },
    
        // LIFE-CYCLE CALLBACKS:
    
        onLoad () {
    
        },
        onMessage:function(obj){
            console.log("It's HelloWorld onMessage----->"+obj);
        },
        onDestroy:function(){
            onfire.un(this.msssageFire);
    
        },
        button_click:function()//按钮事件
        {
            var netControl=require('NetControl');
            console.log("开始连接");
            netControl.connect();
            console.log("连接完成");
            this.msssageFire=onfire.on("onmessage",this.onMessage.bind(this));
            var jsonTmp = "{ "Mobile": "" + 121212 + "", "Password": "" + 121313454545 + "" }";
            netControl.send("1010" + jsonTmp);
            console.log("sendToWS");
        },
        start () {
    
        },
    
        // update (dt) {},
    });

    nodejs服务器

    参考网站

    npm install websocket

    在www文件中添加

    var SocketServer = require('../game/socket-server');
    SocketServer(server);

    新建game文件夹socket-server.js

    /**
     * Created by chu on 2017/8/16 0016.
     */
    
    const SocketServer = function (server) {
        var WebSocket=require('ws');
        var io=new WebSocket.Server({server})
        io.on('connection',function(ws){
            console.log(`[SERVER] connection()`);
            ws.on('message', function (message) {
                console.log("接受消息");
                console.log(`[SERVER] Received: ${message}`);
                ws.send(`ECHO: ${message}`, (err) => {
                    if (err) {
                        console.log(`[SERVER] error: ${err}`);
                    }
                });
            })
        })
        return io;
    };
    module.exports = SocketServer;
  • 相关阅读:
    个人项目(Word Count Java)
    自我介绍+软工5问
    第六次实践
    第五次实践作业
    第四次实践作业
    第三次实践作业
    第二次实践作业
    第1次实践作业
    第06组 Beta版本演示
    第06组 Beta冲刺(4/4)
  • 原文地址:https://www.cnblogs.com/zuhaoran/p/8862495.html
Copyright © 2020-2023  润新知