WebSocket是html5新增的一种通信协议,目前流行的浏览器都会支持。
在cocos中的WebProxyTest.lua存在简单的websocket的使用方法,下面我就按照这个简单记录下,之后有会继续完善:
C++的文件存在引擎目录 /samples/TestCpp/C;asses/ExtensionsTest/NetworkTest/WebSocketTest.cpp文件
C++ cocos2d::network::WebSocket::Delegate定义使用WebSocket需要监听的回调通知接口。使用WebSocket的类,就需要puhlic继承Delegate。
写法:class WebSocketTestLayer : public cocos2d::Layer,public cocos2d::network::WebSocket::Delegate{}
接下来lua书写简单的WebSocket:
-- WebSocket.org 提供的测试服务器 ws://echo.websocket.org
local wsSendText = cc.WebSocket:create("ws://echo.websocket.org")
-- 触发WebSocket的链接服务区成功后WebSocket就会调用onOpen,通知客户的和服务器的已经成功的建立了链接通道。
local function wsSendTextOpen(strData)
print("wsSendTextOpen")
end
-- 服务器向客户端发送的数据(在当前的测试环境服务器下,服务器会把前端发送的数据转发回到客户端)
local function wsSendTextMessage(strData)
print("wsSendTextMessage:"..strData)
end
-- 不管是前端还是服务器关闭了WebSocket都会收到该回调,所以把wsSendText置空
local function wsSendTextClose(strData)
print("_wsiSendText websocket instance closed.")
wsSendText = nil
end
-- 客户端请求错误的时候回调,可更具不同的错误码进行相应的处理
local function wsSendTextError(strData)
print("sendText Error was fired")
end
-- 注册回调以上的函数
if nil ~= wsSendText then
wsSendText:registerScriptHandler(wsSendTextOpen,cc.WEBSOCKET_OPEN)
wsSendText:registerScriptHandler(wsSendTextMessage,cc.WEBSOCKET_MESSAGE)
wsSendText:registerScriptHandler(wsSendTextClose,cc.WEBSOCKET_CLOSE)
wsSendText:registerScriptHandler(wsSendTextError,cc.WEBSOCKET_ERROR)
end
-- 测试发送
function self:TestSendMsg( )
if wsSendText then
local data = {}
data.type = 1
data.ID = "2028"
data.Name = "牛彩瓷"
local strData = json.encode(data)
wsSendText:sendString(strData)
end
end
在lua中的send是不区分二进制和文本模式的统一使用 sendString();
在C++中:
文本模式:
_wsSend->send("Hello WebSocket");
二进制模式:
// 参数 二机制数据,和长度
_wsSend->send( (unsigned char*)buf,sizeof(buf) );