博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebSocket
阅读量:6049 次
发布时间:2019-06-20

本文共 2408 字,大约阅读时间需要 8 分钟。

#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__) */

转载地址:http://aetex.baihongyu.com/

你可能感兴趣的文章
使用crontab调度任务
查看>>
【转载】SQL经验小记
查看>>
zookeeper集群搭建 docker+zk集群搭建
查看>>
Vue2.5笔记:Vue的实例与生命周期
查看>>
论JVM爆炸的几种姿势及自救方法
查看>>
使用throw让服务器端与客户端进行数据交互[Java]
查看>>
java反射与代理
查看>>
深度分析Java的ClassLoader机制(源码级别)
查看>>
微服务架构选Java还是选Go - 多用户负载测试
查看>>
我的友情链接
查看>>
69、iSCSI共享存储配置实战
查看>>
乔布斯走了。你还期待苹果吗?
查看>>
优先级
查看>>
Tomcat与Web服务器、应用服务器的关系
查看>>
用DFS实现全排列 & 八皇后问题
查看>>
深度学习博客
查看>>
Android总结篇系列:Android Service
查看>>
Android dumpsys命令的使用
查看>>
Linux Kernel系列一:开篇和Kernel启动概要
查看>>
Android如何实现超级棒的沉浸式体验
查看>>