Advertisement
Guest User

client

a guest
May 22nd, 2015
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.53 KB | None | 0 0
  1. local liste_client = {} -- ici, chaque å83¥A9lå83¥A9ment sera un couple d'infos : ID client et pseudo
  2.  
  3. local idChannelLogin = 130
  4. local idChannelAdmin = 131
  5. local idChannelAdminRep = 13101
  6. local idChannelMsgRec = 132
  7. local idChannelMsgEnv = 133
  8.  
  9. local keygen = "azerty"
  10.  
  11. local xpos, ypos, monmessage, maxHistoTchat = 3, 18, "", 14
  12.  
  13. function decoration()
  14.     local x, y = 0, 0
  15.     term.clear()
  16.     for x=1,51 do
  17.         paintutils.drawPixel(x,1,colors.red)
  18.         paintutils.drawPixel(x,16,colors.red)
  19.         paintutils.drawPixel(x,19,colors.red)
  20.     end
  21.     for y=2,18 do
  22.         paintutils.drawPixel(1,y,colors.red)
  23.         paintutils.drawPixel(51,y,colors.red)
  24.     end
  25.     for y=2,15 do
  26.         paintutils.drawPixel(11,y,colors.red)
  27.     end
  28.     term.setTextColor(colors.yellow)
  29.     term.setBackgroundColor(colors.red)
  30.     term.setCursorPos(25,1)
  31.     term.write("Tchat")
  32.     term.setBackgroundColor(colors.black)  
  33.     term.setCursorPos(2,2)
  34.     term.write("Online:")
  35.     term.setCursorPos(2,17)
  36.     term.write("Message :")
  37.     term.setTextColor(colors.white)
  38.     term.setCursorPos(2,18)
  39.     term.write(">")
  40.     term.setCursorBlink(true)
  41. end
  42.  
  43. function majListeEcran()
  44.    
  45.     local x, y = 0,0
  46.     term.setBackgroundColor(colors.black)
  47.     term.setTextColor(colors.white)
  48.     for x = 2, 10 do
  49.         for y = 3, 15 do
  50.             term.setCursorPos(x,y)
  51.             term.write(" ")
  52.         end
  53.     end
  54.    
  55.     x, y = 2, 3
  56.    
  57.     for key,value in pairs( liste_client ) do
  58.         term.setCursorPos(x,y)
  59.         term.write(liste_client[key])
  60.         y = y+1
  61.     end
  62.    
  63.     term.setCursorPos(xpos,ypos)
  64.     term.setCursorBlink(true)
  65.    
  66. end
  67.  
  68. function login()
  69.     term.setTextColor(colors.white)
  70.     print("Se connecter au serveur : ")
  71.     idsrv = tonumber(read())
  72.  
  73.     print("Votre pseudo : ")
  74.     local nickname = read()
  75.     local tableau = {key=keygen , id=os.getComputerID() , nickname=nickname, action="login"}
  76.     local msg = textutils.serialize(tableau)
  77.  
  78.     modem.transmit(idChannelLogin,idChannelLogin,msg)
  79. end
  80.  
  81. function logout()
  82.     local tableau = {key=keygen , id=os.getComputerID() , action="logout"}
  83.     local msg = textutils.serialize(tableau)
  84.  
  85.     modem.transmit(idChannelLogin,idChannelLogin,msg)
  86. end
  87.  
  88. function envoiMsg()
  89.     -- a faire
  90.     -- fonction qui envoie notre texte au serveur
  91.     local tableau = {id=os.getComputerID() , mess=monmessage}
  92.     monmessage = ""
  93.     local msg = textutils.serialize(tableau)
  94.  
  95.     modem.transmit(idChannelMsgEnv,idChannelMsgEnv,msg)
  96. end
  97.  
  98. function echangesAdmEnvoi(envquoi)
  99.     -- a faire
  100.     -- echanges avec le serveur :
  101.     --  maj liste presents, etc...
  102.  
  103.     modem.transmit(idChannelAdmin,idChannelAdminRep,envquoi)
  104.    
  105. end
  106.  
  107. --========================================--
  108. --========================================--
  109.  
  110. function echangesAdmReception()
  111.     -- reception d'infos
  112.     while true do
  113.         modem.open(idChannelAdminRep)
  114.         local event, modemSide, senderChannel, replyChannel, text, senderDistance = os.pullEvent("modem_message")
  115.         if senderChannel == idChannelAdminRep then
  116.             liste_client = textutils.unserialize(text)
  117.         end
  118.         majListeEcran()
  119.         modem.close(idChannelAdminRep)
  120.         --sleep(5)
  121.     end
  122. end
  123.  
  124. function receptionMsg()
  125.     -- a faire
  126.     -- fonction qui recoit du serveur les textes
  127.     --   des autres utilisateurs et gå83¥A8re le scroll
  128.     local histoTchat = {}
  129.     local ytchat = 2
  130.     local x, y = 0,0
  131.     modem.open(idChannelMsgRec)
  132.     while true do
  133.         --sleep(5)
  134.         ytchat = 2
  135.         local event, modemSide, senderChannel, replyChannel, text, senderDistance = os.pullEvent("modem_message")
  136.         if senderChannel == idChannelMsgRec then
  137.             --term.setCursorPos(12,8)
  138.             local msgtabrec = textutils.unserialize(text)
  139.             msgrec = "<"..liste_client[msgtabrec.id]..">".." "..msgtabrec.mess
  140.             --term.write(#msgtabrec)
  141.             --read()
  142.             table.insert(histoTchat,msgrec)
  143.             if #histoTchat > maxHistoTchat then
  144.                 table.remove(histoTchat, 1)
  145.             end
  146.  
  147.             --on efface l'ecran de tchat
  148.             term.setBackgroundColor(colors.black)
  149.             term.setTextColor(colors.white)
  150.             for x = 12, 50 do
  151.                 for y = 2, 15 do
  152.                     term.setCursorPos(x,y)
  153.                     term.write(" ")
  154.                 end
  155.             end
  156.             term.setCursorPos(12,2)
  157.             for key,value in pairs( histoTchat ) do
  158.                 term.setCursorPos(12,ytchat)
  159.                 term.write(value)
  160.                 ytchat = ytchat+1
  161.             end
  162.             term.setCursorPos(xpos,ypos)
  163.             echangesAdmEnvoi("majliste")
  164.         end
  165.     end
  166.     modem.close(idChannelMsgEnv)
  167. end
  168.  
  169. function client()
  170.     -- fonction qui gå83¥A8re la tape des messages
  171.     --sleep(1)
  172.     echangesAdmEnvoi("majliste")
  173.  
  174.     while true do
  175.         --sleep(5)
  176.     --monmessage = ""
  177.     local event, p1 = os.pullEvent()
  178.         if (event == "char") and (xpos < 50) then
  179.             monmessage = monmessage..p1
  180.             term.setCursorPos(xpos,ypos)
  181.             term.write(p1)
  182.             xpos = xpos+1
  183.         elseif event == "key" then
  184.             if (p1 == 14) and (xpos > 3) then
  185.                 monmessage = string.sub( monmessage, 1, string.len( monmessage ) - 1 )
  186.                 xpos = xpos-1
  187.                 term.setCursorPos(xpos,ypos)
  188.                 term.write(" ")
  189.                 term.setCursorPos(xpos,ypos)
  190.             elseif p1 == 28 then
  191.                 monmessage = tostring( monmessage )
  192.                 --break
  193.                 if string.match(monmessage, "^/") then
  194.                     monmessage = string.sub( monmessage, 2)
  195.                     if monmessage == "logout" then
  196.                         logout()
  197.                         break
  198.                     end
  199.                 else
  200.                     envoiMsg()
  201.                 end
  202.                 xpos, ypos = 3, 18
  203.                 term.setCursorPos(xpos,ypos)
  204.                 term.write("                                                ")
  205.                 term.setCursorPos(xpos,ypos)
  206.             end
  207.         end
  208.  
  209.     end
  210. end
  211.  
  212. --========================================--
  213. --========================================--
  214.  
  215. term.clear()
  216. term.setCursorPos(1,1)
  217. modem = peripheral.wrap("bottom")
  218.  
  219. login()
  220.  
  221. decoration()
  222.  
  223.  
  224. parallel.waitForAny(echangesAdmReception, receptionMsg, client)
  225.  
  226. print("Fin du programme")
  227. term.clear()
  228. term.setCursorPos(1,1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement