zoukankan      html  css  js  c++  java
  • WebSocket

    #ifndef __CC_WEBSOCKET_H__

    #define __CC_WEBSOCKET_H__


    #include "ExtensionMacros.h"

    #include "cocos2d.h"

    #include "libwebsockets.h"

    #include <list>


    NS_CC_EXT_BEGIN


    class WsThreadHelper;

    class WsMessage;


    class WebSocket

    {

    public:

        WebSocket();

        virtual ~WebSocket();

        

        /**

         *  @brief Data structure for message

         */

        struct Data

        {

            Data():bytes(NULL), len(0), isBinary(false){}

            char* bytes;

            int len;

            bool isBinary;

        };

        

        /**

         *  @brief Errors in websocket

         */

        enum ErrorCode

        {

            kErrorTimeout = 0,

            kErrorConnectionFailure,

            kErrorUnknown

        };


        /**

         *  @brief The delegate class to process websocket events.

         */

        class Delegate

        {

        public:

            virtual ~Delegate() {}

            virtual void onOpen(WebSocket* ws) = 0;

            virtual void onMessage(WebSocket* ws, const Data& data) = 0;

            virtual void onClose(WebSocket* ws) = 0;

            virtual void onError(WebSocket* ws, const ErrorCode& error) = 0;

        };

        

        

        /**

         *  @brief  The initialized method for websocket.

         *          It needs to be invoked right after websocket instance is allocated.

         *  @param  delegate The delegate which want to receive event from websocket.

         *  @param  url      The URL of websocket server.

         *  @return true: Success, false: Failure

         */

        bool init(const Delegate& delegate,

                  const std::string& url,

                  const std::vector<std::string>* protocols = NULL);

        

        /**

         *  @brief Sends string data to websocket server.

         */

        void send(const std::string& message);

        

        /**

         *  @brief Sends binary data to websocket server.

         */

        void send(const unsigned char* binaryMsg, unsigned int len);

        

        /**

         *  @brief Closes the connection to server.

         */

        void close();


        /**

         *  Websocket state

         */

        enum State

        {

            kStateConnecting = 0,

            kStateOpen,

            kStateClosing,

            kStateClosed

        };

        

        /**

         *  @brief Gets current state of connection.

         */

        State getReadyState();

    private:

        virtual void onSubThreadStarted();

        virtual int onSubThreadLoop();

        virtual void onSubThreadEnded();

        virtual void onUIThreadReceiveMessage(WsMessage* msg);

        


        friend class WebSocketCallbackWrapper;

        int onSocketCallback(struct libwebsocket_context *ctx,

                             struct libwebsocket *wsi,

                             enum libwebsocket_callback_reasons reason,

                             void *user, void *in, size_t len);

        

    private:

    State        _readyState;

        std::string  _host;

        unsigned int _port;

        std::string  _path;

        

        friend class WsThreadHelper;

        WsThreadHelper* _wsHelper;

        

        struct libwebsocket*         _wsInstance;

        struct libwebsocket_context* _wsContext;

        Delegate* _delegate;

        int _SSLConnection;

        struct libwebsocket_protocols* _wsProtocols;

    };


    NS_CC_EXT_END


    #endif /* defined(__CC_JSB_WEBSOCKET_H__) */


  • 相关阅读:
    软件项目开发典型风险一览
    删除数据库所有表数据
    今天愚人节,教大家一个真正的最强整人方法
    潘正磊谈微软研发团队管理之道(下)
    追MM与23种设计模式
    22个所见即所得在线 Web 编辑器
    神奇的js代码,图片全都飞起来了
    字体 小 中 大
    使用ODP.NET连接Oracle数据库一个OracleCommand运行多条SQL语句的方法
    删除SQL数据库中所有的表
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/3771157.html
Copyright © 2011-2022 走看看