2014-03-10 15:32:48 +08:00
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
2014-03-12 17:51:34 +08:00
local label = cc.Label : create ( " WebSocket Test " , s_arialPath , 28 )
label : setAnchorPoint ( cc.p ( 0.5 , 0.5 ) )
2014-03-10 15:32:48 +08:00
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
2014-03-12 17:51:34 +08:00
local labelSendText = cc.Label : create ( " Send Text " , s_arialPath , 22 )
labelSendText : setAnchorPoint ( 0.5 , 0.5 )
2014-03-10 15:32:48 +08:00
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
2014-03-12 17:51:34 +08:00
local labelSendBinary = cc.Label : create ( " Send Binary " , s_arialPath , 22 )
labelSendBinary : setAnchorPoint ( cc.p ( 0.5 , 0.5 ) )
2014-03-10 15:32:48 +08:00
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
2014-03-12 17:51:34 +08:00
sendTextStatus = cc.Label : create ( " Send Text WS is waiting... " , s_arialPath , 14 , cc.size ( 160 , 100 ) , cc.VERTICAL_TEXT_ALIGNMENT_CENTER , cc.VERTICAL_TEXT_ALIGNMENT_TOP )
2014-03-10 15:32:48 +08:00
sendTextStatus : setAnchorPoint ( cc.p ( 0 , 0 ) )
sendTextStatus : setPosition ( cc.p ( 0 , 25 ) )
layer : addChild ( sendTextStatus )
--Send Binary Status Label
2014-03-12 17:51:34 +08:00
sendBinaryStatus = cc.Label : create ( " Send Binary WS is waiting... " , s_arialPath , 14 , cc.size ( 160 , 100 ) , cc.VERTICAL_TEXT_ALIGNMENT_CENTER , cc.VERTICAL_TEXT_ALIGNMENT_TOP )
2014-03-10 15:32:48 +08:00
sendBinaryStatus : setAnchorPoint ( cc.p ( 0 , 0 ) )
sendBinaryStatus : setPosition ( cc.p ( 160 , 25 ) )
layer : addChild ( sendBinaryStatus )
--Error Label
2014-03-12 17:51:34 +08:00
errorStatus = cc.Label : create ( " Error WS is waiting... " , s_arialPath , 14 , cc.size ( 160 , 100 ) , cc.VERTICAL_TEXT_ALIGNMENT_CENTER , cc.VERTICAL_TEXT_ALIGNMENT_TOP )
2014-03-10 15:32:48 +08:00
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 = cc.WebSocket : create ( " ws://echo.websocket.org " )
wsSendBinary = cc.WebSocket : create ( " ws://echo.websocket.org " )
wsError = cc.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