axmol/samples/Lua/TestLua/Resources/luaScript/ExtensionTest/WebProxyTest.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