Cocos 2 d-xのWebSocketネットワークプログラミング

5213 ワード

WebSocket
WebSocketは、HTML 5が提供し始めたブラウザとサーバ間のフルデュプレクス通信のネットワーク技術である.WebSocket APIでは、ブラウザとサーバが握手をするだけで、ブラウザとサーバの間に高速チャネルが形成されます.両者の間で直接データを互いに転送することができる.
cococos 2 dでWebSocketを使用するサービス側との通信は非常に簡単である.WebSocket::Delegateを継承し、onOpen、onMessage、onClose、onErrorの4つの虚関数を実現します.2.WebSocketを作成する.3.WebSocketを初期化する(リンクサーバーに相当);4.データの送信5.WebSocketを閉じます.
まず、関連ライブラリの導入と関連ネーミングスペースの使用
#include "network/WebSocket.h"
using namespace cocos2d::network;

WebSocketの継承::Delegate
class HelloWorld : public cocos2d::Layer,public WebSocket::Delegate

4つの虚関数の実装
void HelloWorld::onOpen(WebSocket * ws)
{
    m_log_text->setString("web socket connect success!");
}

void HelloWorld::onMessage(WebSocket * ws, const WebSocket::Data & data)
{
    if (data.isBinary)
    {
        std::string str;
        for (int i = 0; i < data.len; i++)
        {
            str += (data.bytes[i]);
        }
        m_log_text->setString(str);
    }
    else
    {
        char str[256];
        sprintf(str, "%s", data.bytes);
        m_log_text->setString(str);
    }
}

void HelloWorld::onClose(WebSocket * ws)
{
    m_log_text->setString("WebSocket has been closed!");
    m_wSocket = nullptr;
    CC_SAFE_DELETE(ws);
}

void HelloWorld::onError(WebSocket * ws, const WebSocket::ErrorCode & errorCode)
{
    char str[256];
    sprintf(str, "error code:%d", errorCode);
    m_log_text->setString(str);
}

Socketの作成、Socketの初期化
void HelloWorld::onOpenBtnClick(Ref * pRef)
{
    if (m_wSocket == NULL)
    {
        //  WebSocket
        m_wSocket = new WebSocket();

        //   WebSocket,         
        m_wSocket->init(*this, "ws://echo.websocket.org");
    }
}

メッセージの送信
void HelloWorld::onSendTxtBtnClick(Ref * pRef)
{
    //      
    if (m_wSocket)
    {
        static int inx = 1;
        char str[256];
        sprintf(str, "hello world!  :with text :No %d", inx++);
        m_wSocket->send(str);
    }
}

void HelloWorld::onSendBinBtnClick(Ref * pRef)
{
    //       
    if (m_wSocket)
    {
        static int inx = 1;
        char str[256];
        sprintf(str, "hello world!  :with binary :No %d", inx++);
        m_wSocket->send((unsigned char*)str, sizeof(str));
    }
}

Socketを閉じる
void HelloWorld::onCloseBtnClick(Ref * pRef)
{
    //  WebSocket
    if (m_wSocket)
    {
        m_wSocket->close();
    }
}