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を閉じます.
まず、関連ライブラリの導入と関連ネーミングスペースの使用
WebSocketの継承::Delegate
4つの虚関数の実装
Socketの作成、Socketの初期化
メッセージの送信
Socketを閉じる
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();
}
}