mirror of https://github.com/axmolengine/axmol.git
203 lines
7.1 KiB
Lua
203 lines
7.1 KiB
Lua
|
|
local function WebSocketTestLayer()
|
|
local layer = cc.Layer:create()
|
|
local winSize = cc.Director:getInstance():getWinSize()
|
|
|
|
local MARGIN = 40
|
|
local SPACE = 35
|
|
|
|
local wsSendText = nil
|
|
local wsSendBinary = nil
|
|
local wsError = nil
|
|
local sendTextStatus = nil
|
|
local sendBinaryStatus = nil
|
|
local errorStatus = nil
|
|
local receiveTextTimes = 0
|
|
local receiveBinaryTimes = 0
|
|
|
|
local label = cc.LabelTTF:create("WebSocket Test", "Arial", 28)
|
|
label:setPosition(cc.p( winSize.width / 2, winSize.height - MARGIN))
|
|
layer:addChild(label, 0)
|
|
|
|
local menuRequest = cc.Menu:create()
|
|
menuRequest:setPosition(cc.p(0, 0))
|
|
layer:addChild(menuRequest)
|
|
|
|
--Send Text
|
|
local function onMenuSendTextClicked()
|
|
if nil ~= wsSendText then
|
|
if cc.WEBSOCKET_STATE_OPEN == wsSendText:getReadyState() then
|
|
sendTextStatus:setString("Send Text WS is waiting...")
|
|
wsSendText:sendString("Hello WebSocket中文, I'm a text message.")
|
|
else
|
|
local warningStr = "send text websocket instance wasn't ready..."
|
|
print(warningStr)
|
|
sendTextStatus:setString(warningStr)
|
|
end
|
|
end
|
|
end
|
|
local labelSendText = cc.LabelTTF:create("Send Text", "Arial", 22)
|
|
local itemSendText = cc.MenuItemLabel:create(labelSendText)
|
|
itemSendText:registerScriptTapHandler(onMenuSendTextClicked)
|
|
itemSendText:setPosition(cc.p(winSize.width / 2, winSize.height - MARGIN - SPACE))
|
|
menuRequest:addChild(itemSendText)
|
|
|
|
--Send Binary
|
|
local function onMenuSendBinaryClicked()
|
|
if nil ~= wsSendBinary then
|
|
if cc.WEBSOCKET_STATE_OPEN == wsSendBinary:getReadyState() then
|
|
sendBinaryStatus:setString("Send Binary WS is waiting...")
|
|
wsSendBinary:sendString("Hello WebSocket中文--,\0 I'm\0 a\0 binary\0 message\0.")
|
|
else
|
|
local warningStr = "send binary websocket instance wasn't ready..."
|
|
sendBinaryStatus:setString(warningStr)
|
|
end
|
|
end
|
|
end
|
|
local labelSendBinary = cc.LabelTTF:create("Send Binary", "Arial", 22)
|
|
local itemSendBinary = cc.MenuItemLabel:create(labelSendBinary)
|
|
itemSendBinary:registerScriptTapHandler(onMenuSendBinaryClicked)
|
|
itemSendBinary:setPosition(cc.p(winSize.width / 2, winSize.height - MARGIN - 2 * SPACE))
|
|
menuRequest:addChild(itemSendBinary)
|
|
|
|
--Send Text Status Label
|
|
sendTextStatus = cc.LabelTTF:create("Send Text WS is waiting...", "Arial", 14,cc.size(160, 100),cc.VERTICAL_TEXT_ALIGNMENT_CENTER,cc.VERTICAL_TEXT_ALIGNMENT_TOP)
|
|
sendTextStatus:setAnchorPoint(cc.p(0, 0))
|
|
sendTextStatus:setPosition(cc.p(0, 25))
|
|
layer:addChild(sendTextStatus)
|
|
|
|
--Send Binary Status Label
|
|
sendBinaryStatus = cc.LabelTTF:create("Send Binary WS is waiting...", "Arial", 14, cc.size(160, 100), cc.VERTICAL_TEXT_ALIGNMENT_CENTER, cc.VERTICAL_TEXT_ALIGNMENT_TOP)
|
|
sendBinaryStatus:setAnchorPoint(cc.p(0, 0))
|
|
sendBinaryStatus:setPosition(cc.p(160, 25))
|
|
layer:addChild(sendBinaryStatus)
|
|
|
|
--Error Label
|
|
errorStatus = cc.LabelTTF:create("Error WS is waiting...", "Arial", 14, cc.size(160, 100), cc.VERTICAL_TEXT_ALIGNMENT_CENTER, cc.VERTICAL_TEXT_ALIGNMENT_TOP)
|
|
errorStatus:setAnchorPoint(cc.p(0, 0))
|
|
errorStatus:setPosition(cc.p(320, 25))
|
|
layer:addChild(errorStatus)
|
|
|
|
local toMainMenu = cc.Menu:create()
|
|
CreateExtensionsBasicLayerMenu(toMainMenu)
|
|
toMainMenu:setPosition(cc.p(0, 0))
|
|
layer:addChild(toMainMenu,10)
|
|
|
|
wsSendText = WebSocket:create("ws://echo.websocket.org")
|
|
wsSendBinary = WebSocket:create("ws://echo.websocket.org")
|
|
wsError = WebSocket:create("ws://invalid.url.com")
|
|
|
|
local function wsSendTextOpen(strData)
|
|
sendTextStatus:setString("Send Text WS was opened.")
|
|
end
|
|
|
|
local function wsSendTextMessage(strData)
|
|
receiveTextTimes= receiveTextTimes + 1
|
|
local strInfo= "response text msg: "..strData..", "..receiveTextTimes
|
|
sendTextStatus:setString(strInfo)
|
|
end
|
|
|
|
local function wsSendTextClose(strData)
|
|
print("_wsiSendText websocket instance closed.")
|
|
sendTextStatus = nil
|
|
wsSendText = nil
|
|
end
|
|
|
|
local function wsSendTextError(strData)
|
|
print("sendText Error was fired")
|
|
end
|
|
|
|
local function wsSendBinaryOpen(strData)
|
|
sendBinaryStatus:setString("Send Binary WS was opened.")
|
|
end
|
|
|
|
local function wsSendBinaryMessage(paramTable)
|
|
local length = table.getn(paramTable)
|
|
local i = 1
|
|
local strInfo = "response bin msg: "
|
|
for i = 1,length do
|
|
if 0 == paramTable[i] then
|
|
strInfo = strInfo.."\'\\0\'"
|
|
else
|
|
strInfo = strInfo..string.char(paramTable[i])
|
|
end
|
|
end
|
|
receiveBinaryTimes = receiveBinaryTimes + 1
|
|
strInfo = strInfo..receiveBinaryTimes
|
|
sendBinaryStatus:setString(strInfo)
|
|
end
|
|
|
|
local function wsSendBinaryClose(strData)
|
|
print("_wsiSendBinary websocket instance closed.")
|
|
sendBinaryStatus = nil
|
|
wsSendBinary = nil
|
|
end
|
|
|
|
local function wsSendBinaryError(strData)
|
|
print("sendBinary Error was fired")
|
|
end
|
|
|
|
local function wsErrorOpen(strData)
|
|
end
|
|
|
|
local function wsErrorMessage(strData)
|
|
|
|
end
|
|
|
|
local function wsErrorError(strData)
|
|
print("Error was fired")
|
|
errorStatus:setString("an error was fired")
|
|
end
|
|
|
|
local function wsErrorClose(strData)
|
|
print("_wsiError websocket instance closed.")
|
|
errorStatus= nil
|
|
wsError = nil
|
|
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
|
|
|
|
if nil ~= wsSendBinary then
|
|
wsSendBinary:registerScriptHandler(wsSendBinaryOpen,cc.WEBSOCKET_OPEN)
|
|
wsSendBinary:registerScriptHandler(wsSendBinaryMessage,cc.WEBSOCKET_MESSAGE)
|
|
wsSendBinary:registerScriptHandler(wsSendBinaryClose,cc.WEBSOCKET_CLOSE)
|
|
wsSendBinary:registerScriptHandler(wsSendBinaryError,cc.WEBSOCKET_ERROR)
|
|
end
|
|
|
|
if nil ~= wsError then
|
|
wsError:registerScriptHandler(wsErrorOpen,cc.WEBSOCKET_OPEN)
|
|
wsError:registerScriptHandler(wsErrorMessage,cc.WEBSOCKET_MESSAGE)
|
|
wsError:registerScriptHandler(wsErrorClose,cc.WEBSOCKET_CLOSE)
|
|
wsError:registerScriptHandler(wsErrorError,cc.WEBSOCKET_ERROR)
|
|
end
|
|
|
|
local function OnExit(strEventName)
|
|
if "exit" == strEventName then
|
|
if nil ~= wsSendText then
|
|
wsSendText:close()
|
|
end
|
|
if nil ~= wsSendBinary then
|
|
wsSendBinary:close()
|
|
end
|
|
if nil ~= wsError then
|
|
wsError:close()
|
|
end
|
|
end
|
|
end
|
|
|
|
layer:registerScriptHandler(OnExit)
|
|
|
|
return layer
|
|
end
|
|
|
|
function runWebSocketTest()
|
|
local scene = cc.Scene:create()
|
|
scene:addChild(WebSocketTestLayer())
|
|
return scene
|
|
end
|