Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local liste_client = {} -- ici, chaque å83¥A9lå83¥A9ment sera un couple d'infos : ID client et pseudo
- local idChannelLogin = 130
- local idChannelAdmin = 131
- local idChannelAdminRep = 13101
- local idChannelMsgRec = 132
- local idChannelMsgEnv = 133
- local keygen = "azerty"
- local xpos, ypos, monmessage, maxHistoTchat = 3, 18, "", 14
- function decoration()
- local x, y = 0, 0
- term.clear()
- for x=1,51 do
- paintutils.drawPixel(x,1,colors.red)
- paintutils.drawPixel(x,16,colors.red)
- paintutils.drawPixel(x,19,colors.red)
- end
- for y=2,18 do
- paintutils.drawPixel(1,y,colors.red)
- paintutils.drawPixel(51,y,colors.red)
- end
- for y=2,15 do
- paintutils.drawPixel(11,y,colors.red)
- end
- term.setTextColor(colors.yellow)
- term.setBackgroundColor(colors.red)
- term.setCursorPos(25,1)
- term.write("Tchat")
- term.setBackgroundColor(colors.black)
- term.setCursorPos(2,2)
- term.write("Online:")
- term.setCursorPos(2,17)
- term.write("Message :")
- term.setTextColor(colors.white)
- term.setCursorPos(2,18)
- term.write(">")
- term.setCursorBlink(true)
- end
- function majListeEcran()
- local x, y = 0,0
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- for x = 2, 10 do
- for y = 3, 15 do
- term.setCursorPos(x,y)
- term.write(" ")
- end
- end
- x, y = 2, 3
- for key,value in pairs( liste_client ) do
- term.setCursorPos(x,y)
- term.write(liste_client[key])
- y = y+1
- end
- term.setCursorPos(xpos,ypos)
- term.setCursorBlink(true)
- end
- function login()
- term.setTextColor(colors.white)
- print("Se connecter au serveur : ")
- idsrv = tonumber(read())
- print("Votre pseudo : ")
- local nickname = read()
- local tableau = {key=keygen , id=os.getComputerID() , nickname=nickname, action="login"}
- local msg = textutils.serialize(tableau)
- modem.transmit(idChannelLogin,idChannelLogin,msg)
- end
- function logout()
- local tableau = {key=keygen , id=os.getComputerID() , action="logout"}
- local msg = textutils.serialize(tableau)
- modem.transmit(idChannelLogin,idChannelLogin,msg)
- end
- function envoiMsg()
- -- a faire
- -- fonction qui envoie notre texte au serveur
- local tableau = {id=os.getComputerID() , mess=monmessage}
- monmessage = ""
- local msg = textutils.serialize(tableau)
- modem.transmit(idChannelMsgEnv,idChannelMsgEnv,msg)
- end
- function echangesAdmEnvoi(envquoi)
- -- a faire
- -- echanges avec le serveur :
- -- maj liste presents, etc...
- modem.transmit(idChannelAdmin,idChannelAdminRep,envquoi)
- end
- --========================================--
- --========================================--
- function echangesAdmReception()
- -- reception d'infos
- while true do
- modem.open(idChannelAdminRep)
- local event, modemSide, senderChannel, replyChannel, text, senderDistance = os.pullEvent("modem_message")
- if senderChannel == idChannelAdminRep then
- liste_client = textutils.unserialize(text)
- end
- majListeEcran()
- modem.close(idChannelAdminRep)
- --sleep(5)
- end
- end
- function receptionMsg()
- -- a faire
- -- fonction qui recoit du serveur les textes
- -- des autres utilisateurs et gå83¥A8re le scroll
- local histoTchat = {}
- local ytchat = 2
- local x, y = 0,0
- modem.open(idChannelMsgRec)
- while true do
- --sleep(5)
- ytchat = 2
- local event, modemSide, senderChannel, replyChannel, text, senderDistance = os.pullEvent("modem_message")
- if senderChannel == idChannelMsgRec then
- --term.setCursorPos(12,8)
- local msgtabrec = textutils.unserialize(text)
- msgrec = "<"..liste_client[msgtabrec.id]..">".." "..msgtabrec.mess
- --term.write(#msgtabrec)
- --read()
- table.insert(histoTchat,msgrec)
- if #histoTchat > maxHistoTchat then
- table.remove(histoTchat, 1)
- end
- --on efface l'ecran de tchat
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- for x = 12, 50 do
- for y = 2, 15 do
- term.setCursorPos(x,y)
- term.write(" ")
- end
- end
- term.setCursorPos(12,2)
- for key,value in pairs( histoTchat ) do
- term.setCursorPos(12,ytchat)
- term.write(value)
- ytchat = ytchat+1
- end
- term.setCursorPos(xpos,ypos)
- echangesAdmEnvoi("majliste")
- end
- end
- modem.close(idChannelMsgEnv)
- end
- function client()
- -- fonction qui gå83¥A8re la tape des messages
- --sleep(1)
- echangesAdmEnvoi("majliste")
- while true do
- --sleep(5)
- --monmessage = ""
- local event, p1 = os.pullEvent()
- if (event == "char") and (xpos < 50) then
- monmessage = monmessage..p1
- term.setCursorPos(xpos,ypos)
- term.write(p1)
- xpos = xpos+1
- elseif event == "key" then
- if (p1 == 14) and (xpos > 3) then
- monmessage = string.sub( monmessage, 1, string.len( monmessage ) - 1 )
- xpos = xpos-1
- term.setCursorPos(xpos,ypos)
- term.write(" ")
- term.setCursorPos(xpos,ypos)
- elseif p1 == 28 then
- monmessage = tostring( monmessage )
- --break
- if string.match(monmessage, "^/") then
- monmessage = string.sub( monmessage, 2)
- if monmessage == "logout" then
- logout()
- break
- end
- else
- envoiMsg()
- end
- xpos, ypos = 3, 18
- term.setCursorPos(xpos,ypos)
- term.write(" ")
- term.setCursorPos(xpos,ypos)
- end
- end
- end
- end
- --========================================--
- --========================================--
- term.clear()
- term.setCursorPos(1,1)
- modem = peripheral.wrap("bottom")
- login()
- decoration()
- parallel.waitForAny(echangesAdmReception, receptionMsg, client)
- print("Fin du programme")
- term.clear()
- term.setCursorPos(1,1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement