聊天室添加ui,websocket连接/断开功能拓展
This commit is contained in:
@@ -33,6 +33,7 @@ local SCN={
|
|||||||
keyUp=nil,
|
keyUp=nil,
|
||||||
gamepadDown=nil,
|
gamepadDown=nil,
|
||||||
gamepadUp=nil,
|
gamepadUp=nil,
|
||||||
|
socketRead=nil,
|
||||||
}--Scene datas, returned
|
}--Scene datas, returned
|
||||||
|
|
||||||
function SCN.add(name,scene)
|
function SCN.add(name,scene)
|
||||||
@@ -72,6 +73,7 @@ function SCN.init(s,org)
|
|||||||
SCN.keyUp=S.keyUp
|
SCN.keyUp=S.keyUp
|
||||||
SCN.gamepadDown=S.gamepadDown
|
SCN.gamepadDown=S.gamepadDown
|
||||||
SCN.gamepadUp=S.gamepadUp
|
SCN.gamepadUp=S.gamepadUp
|
||||||
|
SCN.socketRead=S.socketRead
|
||||||
if SCN.sceneInit then SCN.sceneInit(org)end
|
if SCN.sceneInit then SCN.sceneInit(org)end
|
||||||
end
|
end
|
||||||
function SCN.push(tar,style)
|
function SCN.push(tar,style)
|
||||||
|
|||||||
@@ -544,41 +544,75 @@ do--urlencode
|
|||||||
end
|
end
|
||||||
do--httpRequest & wsConnect
|
do--httpRequest & wsConnect
|
||||||
client=LOADLIB("NETlib")
|
client=LOADLIB("NETlib")
|
||||||
httpRequest=
|
if client then
|
||||||
client and function(tick,path,method,header,body)
|
function httpRequest(tick,path,method,header,body)
|
||||||
local task,err=client.httpraw{
|
local task,err=client.httpraw{
|
||||||
url="http://krakens.tpddns.cn:10026"..path,
|
url="http://krakens.tpddns.cn:10026"..path,
|
||||||
method=method or"GET",
|
method=method or"GET",
|
||||||
header=header,
|
header=header,
|
||||||
body=body,
|
body=body,
|
||||||
}
|
}
|
||||||
if task then
|
if task then
|
||||||
TASK.newNet(tick,task)
|
TASK.newNet(tick,task)
|
||||||
else
|
else
|
||||||
LOG.print("NETlib error: "..err,"warn")
|
LOG.print("NETlib error: "..err,"warn")
|
||||||
|
end
|
||||||
|
TASK.netTaskCount=TASK.netTaskCount+1
|
||||||
end
|
end
|
||||||
TASK.netTaskCount=TASK.netTaskCount+1
|
|
||||||
end or
|
|
||||||
function()
|
|
||||||
LOG.print("[NO NETlib]",5,COLOR.yellow)
|
|
||||||
end
|
|
||||||
|
|
||||||
wsConnect=
|
function wsConnect(tick,path,header)
|
||||||
client and function(tick,path,header)
|
local task,err=client.wsraw{
|
||||||
local task,err=client.wsraw{
|
url="ws://krakens.tpddns.cn:10026"..path,
|
||||||
url="ws://krakens.tpddns.cn:10026"..path,
|
origin="krakens.tpddns.cn",
|
||||||
origin="krakens.tpddns.cn",
|
header=header,
|
||||||
header=header,
|
}
|
||||||
}
|
if task then
|
||||||
if task then
|
TASK.newNet(tick,task)
|
||||||
TASK.newNet(tick,task)
|
else
|
||||||
else
|
LOG.print("NETlib error: "..err,"warn")
|
||||||
LOG.print("NETlib error: "..err,"warn")
|
end
|
||||||
|
TASK.netTaskCount=TASK.netTaskCount+1
|
||||||
|
end
|
||||||
|
|
||||||
|
function wsWrite(data)
|
||||||
|
if WSCONN then
|
||||||
|
local writeErr=client.write(WSCONN,data)
|
||||||
|
if writeErr then
|
||||||
|
LOG.print(writeErr,"error")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
LOG.print(text.wsNoConn,"warn")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local function noNetLib()
|
||||||
|
LOG.print("[NO NETlib]",5,COLOR.yellow)
|
||||||
|
end
|
||||||
|
httpRequest=noNetLib
|
||||||
|
wsConnect=noNetLib
|
||||||
|
wsWrite=noNetLib
|
||||||
|
end
|
||||||
|
end
|
||||||
|
do--wheelScroll
|
||||||
|
local floatWheel=0
|
||||||
|
function wheelScroll(y)
|
||||||
|
if y>0 then
|
||||||
|
if floatWheel<0 then floatWheel=0 end
|
||||||
|
floatWheel=floatWheel+y^1.2
|
||||||
|
elseif y<0 then
|
||||||
|
if floatWheel>0 then floatWheel=0 end
|
||||||
|
floatWheel=floatWheel-(-y)^1.2
|
||||||
|
end
|
||||||
|
while floatWheel>=1 do
|
||||||
|
love.keypressed("up")
|
||||||
|
floatWheel=floatWheel-1
|
||||||
|
end
|
||||||
|
while floatWheel<=-1 do
|
||||||
|
love.keypressed("down")
|
||||||
|
floatWheel=floatWheel+1
|
||||||
end
|
end
|
||||||
TASK.netTaskCount=TASK.netTaskCount+1
|
|
||||||
end or
|
|
||||||
function()
|
|
||||||
LOG.print("[NO NETlib]",5,COLOR.yellow)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function copyList(org)
|
function copyList(org)
|
||||||
|
|||||||
@@ -86,8 +86,15 @@ return{
|
|||||||
loginFailed="Login failed",
|
loginFailed="Login failed",
|
||||||
accessSuccessed="Successfully authorized!",
|
accessSuccessed="Successfully authorized!",
|
||||||
accessFailed="Authorization failed",
|
accessFailed="Authorization failed",
|
||||||
wsSuccessed="Websocket connected!",
|
-- wsSuccessed="WS连接成功",
|
||||||
wsFailed="Websocket failed to connect",
|
-- wsFailed="WS连接失败",
|
||||||
|
-- wsDisconnected="WS连接断开",
|
||||||
|
-- wsNoConn="WS未连接",
|
||||||
|
|
||||||
|
-- chatJoin="有人来了,当前人数:",
|
||||||
|
-- chatLeave="有人离开了,当前人数:",
|
||||||
|
-- chatRemain="人数:",
|
||||||
|
-- chatHistory="------以上是历史消息------",
|
||||||
|
|
||||||
errorMsg="An error has occurred and Techmino needs to restart.\nError info has been created, and you can send it to the author.",
|
errorMsg="An error has occurred and Techmino needs to restart.\nError info has been created, and you can send it to the author.",
|
||||||
|
|
||||||
@@ -215,6 +222,7 @@ return{
|
|||||||
chat="Chat",
|
chat="Chat",
|
||||||
},
|
},
|
||||||
chat={
|
chat={
|
||||||
|
clear="Clear",
|
||||||
send="Send",
|
send="Send",
|
||||||
},
|
},
|
||||||
setting_game={
|
setting_game={
|
||||||
|
|||||||
@@ -89,8 +89,15 @@ return{
|
|||||||
-- loginFailed="Login failed",
|
-- loginFailed="Login failed",
|
||||||
-- accessSuccessed="Successfully authorized!",
|
-- accessSuccessed="Successfully authorized!",
|
||||||
-- accessFailed="Authorization failed",
|
-- accessFailed="Authorization failed",
|
||||||
-- wsSuccessed="Websocket connected!",
|
-- wsSuccessed="WS连接成功",
|
||||||
-- wsFailed="Websocket failed to connect",
|
-- wsFailed="WS连接失败",
|
||||||
|
-- wsDisconnected="WS连接断开",
|
||||||
|
-- wsNoConn="WS未连接",
|
||||||
|
|
||||||
|
-- chatJoin="有人来了,当前人数:",
|
||||||
|
-- chatLeave="有人离开了,当前人数:",
|
||||||
|
-- chatRemain="人数:",
|
||||||
|
-- chatHistory="------以上是历史消息------",
|
||||||
|
|
||||||
errorMsg="Une erreur est survenue et Techmino doit redémarrer.\nDes informations concernant l'erreur ont été créées, et vous pouvez les envoyer au créateur.",
|
errorMsg="Une erreur est survenue et Techmino doit redémarrer.\nDes informations concernant l'erreur ont été créées, et vous pouvez les envoyer au créateur.",
|
||||||
|
|
||||||
@@ -217,6 +224,7 @@ return{
|
|||||||
-- chat="Chat",
|
-- chat="Chat",
|
||||||
},
|
},
|
||||||
chat={
|
chat={
|
||||||
|
-- clear="Clear",
|
||||||
-- send="Send",
|
-- send="Send",
|
||||||
},
|
},
|
||||||
setting_game={
|
setting_game={
|
||||||
|
|||||||
@@ -90,8 +90,15 @@ return{
|
|||||||
-- loginFailed="Login failed",
|
-- loginFailed="Login failed",
|
||||||
-- accessSuccessed="Successfully authorized!",
|
-- accessSuccessed="Successfully authorized!",
|
||||||
-- accessFailed="Authorization failed",
|
-- accessFailed="Authorization failed",
|
||||||
-- wsSuccessed="Websocket connected!",
|
-- wsSuccessed="WS连接成功",
|
||||||
-- wsFailed="Websocket failed to connect",
|
-- wsFailed="WS连接失败",
|
||||||
|
-- wsDisconnected="WS连接断开",
|
||||||
|
-- wsNoConn="WS未连接",
|
||||||
|
|
||||||
|
-- chatJoin="有人来了,当前人数:",
|
||||||
|
-- chatLeave="有人离开了,当前人数:",
|
||||||
|
-- chatRemain="人数:",
|
||||||
|
-- chatHistory="------以上是历史消息------",
|
||||||
|
|
||||||
errorMsg="Ha ocurrido un error y Techmino necesita reiniciarse.\nSe creó un registro de error, puedes enviarlo al autor.",
|
errorMsg="Ha ocurrido un error y Techmino necesita reiniciarse.\nSe creó un registro de error, puedes enviarlo al autor.",
|
||||||
|
|
||||||
@@ -221,6 +228,7 @@ return{
|
|||||||
-- chat="Chat",
|
-- chat="Chat",
|
||||||
},
|
},
|
||||||
chat={
|
chat={
|
||||||
|
-- clear="Clear",
|
||||||
-- send="Send",
|
-- send="Send",
|
||||||
},
|
},
|
||||||
setting_game={
|
setting_game={
|
||||||
|
|||||||
@@ -83,12 +83,19 @@ return{
|
|||||||
diffPassword="两次密码不一致",
|
diffPassword="两次密码不一致",
|
||||||
registerSuccessed="注册成功!",
|
registerSuccessed="注册成功!",
|
||||||
registerFailed="注册失败",
|
registerFailed="注册失败",
|
||||||
loginSuccessed="登录成功!",
|
loginSuccessed="登录成功",
|
||||||
loginFailed="登录失败",
|
loginFailed="登录失败",
|
||||||
accessSuccessed="授权成功!",
|
accessSuccessed="授权成功",
|
||||||
accessFailed="授权失败",
|
accessFailed="授权失败",
|
||||||
wsSuccessed="连接成功!",
|
wsSuccessed="WS连接成功",
|
||||||
wsFailed="连接失败",
|
wsFailed="WS连接失败",
|
||||||
|
wsDisconnected="WS连接断开",
|
||||||
|
wsNoConn="WS未连接",
|
||||||
|
|
||||||
|
chatJoin="有人来了,当前人数:",
|
||||||
|
chatLeave="有人离开了,当前人数:",
|
||||||
|
chatRemain="人数:",
|
||||||
|
chatHistory="------以上是历史消息------",
|
||||||
|
|
||||||
errorMsg="Techmino遭受了雷击,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
errorMsg="Techmino遭受了雷击,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||||
|
|
||||||
@@ -241,6 +248,7 @@ return{
|
|||||||
chat="聊天室",
|
chat="聊天室",
|
||||||
},
|
},
|
||||||
chat={
|
chat={
|
||||||
|
clear="清空",
|
||||||
send="发送",
|
send="发送",
|
||||||
},
|
},
|
||||||
setting_game={
|
setting_game={
|
||||||
|
|||||||
@@ -1,36 +1,66 @@
|
|||||||
local function socketWrite(message)
|
local gc=love.graphics
|
||||||
if WSCONN then
|
local Timer=love.timer.getTime
|
||||||
local writeErr=client.write(WSCONN,message)
|
|
||||||
if writeErr then print(writeErr,"warn")end
|
local ins=table.insert
|
||||||
else
|
local max,min=math.max,math.min
|
||||||
LOG.print("尚未连接到服务器","warn")
|
|
||||||
end
|
local texts={}
|
||||||
end
|
local remain--People in chat room
|
||||||
|
local scroll--Bottom message no.
|
||||||
|
local newMessasge=false--If there is a new message
|
||||||
|
|
||||||
local function sendMessage()
|
local function sendMessage()
|
||||||
local W=WIDGET.active.text
|
local W=WIDGET.active.text
|
||||||
if #W.value>0 then
|
if #W.value>0 and wsWrite(W.value)then
|
||||||
socketWrite(W.value)
|
|
||||||
W.value=""
|
W.value=""
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local function clearHistory()
|
||||||
|
if #texts>0 then
|
||||||
|
texts={}
|
||||||
|
scroll=0
|
||||||
|
SFX.play("fall")
|
||||||
|
collectgarbage()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local scene={}
|
local scene={}
|
||||||
|
|
||||||
function scene.sceneInit()
|
function scene.sceneInit()
|
||||||
|
remain=nil
|
||||||
|
|
||||||
|
scroll=#texts
|
||||||
|
if scroll>0 then
|
||||||
|
if texts[scroll][1]~=COLOR.green then
|
||||||
|
ins(texts,{COLOR.green,text.chatHistory})
|
||||||
|
scroll=scroll+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
WIDGET.sel=WIDGET.active.text
|
||||||
BG.set("none")
|
BG.set("none")
|
||||||
wsConnect(
|
wsConnect(
|
||||||
TICK.wsCONN_connect,
|
TICK.wsCONN_connect,
|
||||||
PATH.socket..PATH.chat.."?email="..urlEncode(ACCOUNT.email).."&access_token="..urlEncode(ACCOUNT.access_token)
|
PATH.socket..PATH.chat.."?email="..urlEncode(ACCOUNT.email).."&access_token="..urlEncode(ACCOUNT.access_token)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function scene.sceneBack()
|
function scene.sceneBack()
|
||||||
WSCONN=nil
|
wsWrite("/quit")
|
||||||
|
WSCONN=nil
|
||||||
|
LOG.print(text.wsDisconnected,"warn")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function scene.wheelMoved(_,y)
|
||||||
|
wheelScroll(y)
|
||||||
|
end
|
||||||
function scene.keyDown(k)
|
function scene.keyDown(k)
|
||||||
if k=="return"then
|
if k=="up"then
|
||||||
|
scroll=max(scroll-1,min(#texts,12))
|
||||||
|
elseif k=="down"then
|
||||||
|
scroll=min(scroll+1,#texts)
|
||||||
|
if scroll==#texts then
|
||||||
|
newMessasge=false
|
||||||
|
end
|
||||||
|
elseif k=="return"then
|
||||||
sendMessage()
|
sendMessage()
|
||||||
elseif k=="escape"then
|
elseif k=="escape"then
|
||||||
SCN.back()
|
SCN.back()
|
||||||
@@ -39,8 +69,73 @@ function scene.keyDown(k)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function scene.socketRead(mes)
|
||||||
|
if mes:byte()==35 then--system message
|
||||||
|
local sep=mes:find(":")
|
||||||
|
local cmd=mes:sub(2,sep-1)
|
||||||
|
local data=mes:sub(sep+1)
|
||||||
|
if cmd=="J"then
|
||||||
|
remain=tonumber(data)
|
||||||
|
if remain<=10 then
|
||||||
|
ins(texts,{COLOR.yellow,text.chatJoin..remain})
|
||||||
|
end
|
||||||
|
elseif cmd=="L"then
|
||||||
|
remain=tonumber(data)
|
||||||
|
if remain<=10 then
|
||||||
|
ins(texts,{COLOR.yellow,text.chatLeave..remain})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else--user message
|
||||||
|
local sep=mes:find(":")
|
||||||
|
local num=mes:find("#")
|
||||||
|
ins(texts,{
|
||||||
|
COLOR.white,mes:sub(1,num-1),
|
||||||
|
COLOR.dY,mes:sub(num,sep-1).." ",
|
||||||
|
COLOR.sky,mes:sub(sep+1),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
if scroll==#texts-1 then
|
||||||
|
scroll=scroll+1
|
||||||
|
else
|
||||||
|
SFX.play("spin_0",.8)
|
||||||
|
newMessasge=true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function scene.draw()
|
||||||
|
setFont(25)
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
gc.printf(text.chatRemain,800,10,400,"right")
|
||||||
|
gc.print(remain or"?",1205,10)
|
||||||
|
|
||||||
|
setFont(30)
|
||||||
|
for i=max(scroll-11,1),scroll do
|
||||||
|
gc.printf(texts[i],40,449-39*(scroll-i),1240)
|
||||||
|
end
|
||||||
|
|
||||||
|
--Slider
|
||||||
|
if #texts>12 then
|
||||||
|
gc.setLineWidth(2)
|
||||||
|
gc.rectangle("line",10,30,20,450)
|
||||||
|
local len=450*12/#texts
|
||||||
|
gc.rectangle("fill",10,30+(450-len)*(scroll-12)/(#texts-12),20,len)
|
||||||
|
end
|
||||||
|
|
||||||
|
--Draw
|
||||||
|
if scroll~=#texts then
|
||||||
|
setFont(40)
|
||||||
|
if newMessasge then
|
||||||
|
gc.setColor(1,Timer()%.4<.2 and 1 or 0,0)
|
||||||
|
else
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
end
|
||||||
|
gc.print("v",8,480)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
scene.widgetList={
|
scene.widgetList={
|
||||||
WIDGET.newTextBox{name="text", x=40, y=500,w=980,h=180,font=40},
|
WIDGET.newTextBox{name="text", x=40, y=500,w=980,h=180,font=40},
|
||||||
|
WIDGET.newButton{name="clear", x=1140, y=440,w=170,h=80,font=40,code=clearHistory},
|
||||||
WIDGET.newButton{name="send", x=1140, y=540,w=170,h=80,font=40,code=sendMessage},
|
WIDGET.newButton{name="send", x=1140, y=540,w=170,h=80,font=40,code=sendMessage},
|
||||||
WIDGET.newButton{name="back", x=1140, y=640,w=170,h=80,font=40,code=WIDGET.lnk_BACK},
|
WIDGET.newButton{name="back", x=1140, y=640,w=170,h=80,font=40,code=WIDGET.lnk_BACK},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,6 @@
|
|||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local max,min=math.max,math.min
|
local max,min=math.max,math.min
|
||||||
|
|
||||||
local floatWheel=0
|
|
||||||
local function wheelScroll(y)
|
|
||||||
if y>0 then
|
|
||||||
if floatWheel<0 then floatWheel=0 end
|
|
||||||
floatWheel=floatWheel+y^1.2
|
|
||||||
elseif y<0 then
|
|
||||||
if floatWheel>0 then floatWheel=0 end
|
|
||||||
floatWheel=floatWheel-(-y)^1.2
|
|
||||||
end
|
|
||||||
while floatWheel>=1 do
|
|
||||||
love.keypressed("up")
|
|
||||||
floatWheel=floatWheel-1
|
|
||||||
end
|
|
||||||
while floatWheel<=-1 do
|
|
||||||
love.keypressed("down")
|
|
||||||
floatWheel=floatWheel+1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local scene={}
|
local scene={}
|
||||||
|
|
||||||
function scene.sceneInit()
|
function scene.sceneInit()
|
||||||
|
|||||||
@@ -3,25 +3,6 @@ local Timer=love.timer.getTime
|
|||||||
|
|
||||||
local sin=math.sin
|
local sin=math.sin
|
||||||
|
|
||||||
local floatWheel=0
|
|
||||||
local function wheelScroll(y)
|
|
||||||
if y>0 then
|
|
||||||
if floatWheel<0 then floatWheel=0 end
|
|
||||||
floatWheel=floatWheel+y^1.2
|
|
||||||
elseif y<0 then
|
|
||||||
if floatWheel>0 then floatWheel=0 end
|
|
||||||
floatWheel=floatWheel-(-y)^1.2
|
|
||||||
end
|
|
||||||
while floatWheel>=1 do
|
|
||||||
love.keypressed("up")
|
|
||||||
floatWheel=floatWheel-1
|
|
||||||
end
|
|
||||||
while floatWheel<=-1 do
|
|
||||||
love.keypressed("down")
|
|
||||||
floatWheel=floatWheel+1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local scene={}
|
local scene={}
|
||||||
|
|
||||||
function scene.sceneInit()
|
function scene.sceneInit()
|
||||||
|
|||||||
@@ -323,6 +323,7 @@ function Tick.wsCONN_connect(task)
|
|||||||
if wsconn then
|
if wsconn then
|
||||||
WSCONN=wsconn
|
WSCONN=wsconn
|
||||||
TASK.new(Tick.wsCONN_read)
|
TASK.new(Tick.wsCONN_read)
|
||||||
|
LOG.print(text.wsSuccessed,"warn")
|
||||||
return
|
return
|
||||||
elseif connErr then
|
elseif connErr then
|
||||||
LOG.print(text.wsFailed..": "..connErr,"warn")
|
LOG.print(text.wsFailed..": "..connErr,"warn")
|
||||||
@@ -341,15 +342,13 @@ function Tick.wsCONN_read()
|
|||||||
if not WSCONN then return end
|
if not WSCONN then return end
|
||||||
local messages,readErr=client.read(WSCONN)
|
local messages,readErr=client.read(WSCONN)
|
||||||
if messages then
|
if messages then
|
||||||
if messages[1]then
|
for i=1,#messages do
|
||||||
LOG.print(messages[1])
|
SCN.socketRead(messages[i])
|
||||||
end
|
end
|
||||||
elseif readErr then
|
elseif readErr then
|
||||||
print("Read error: "..readErr)
|
wsWrite("/quit")
|
||||||
if readErr=="EOF"then
|
|
||||||
LOG.print("Socket closed!","warn")
|
|
||||||
end
|
|
||||||
WSCONN=nil
|
WSCONN=nil
|
||||||
|
LOG.print(text.wsDisconnected,"warn")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user