CoderJohn

ComputerCraft Email Server - ENET

Nov 12th, 2012
534
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. local connectedIPs = {};
  2. local hasModem;
  3. local width, height = term.getSize();
  4. if(not fs.exists("./users/"))then
  5. fs.makeDir("./users/");
  6. end
  7.  
  8. function print(...)
  9. local y=({term.getCursorPos()})[2];
  10. for i,text in pairs({...})do
  11. text = tostring(text);
  12. term.write(text);
  13. y = y + 1;
  14. if(y==height)then y=1; term.clear(); end
  15. term.setCursorPos(1, y);
  16. end
  17. end
  18.  
  19. function getModem()
  20. local sides = {"left","right","front","back","bottom","top"};
  21. for i=1,#sides do
  22. hasModem = (peripheral.isPresent(sides[i]) and peripheral.getType(sides[i])=='modem') or false;
  23. if(hasModem)then
  24. hasModem = sides[i];
  25. rednet.open(hasModem);
  26. term.clear(); term.setCursorPos(1,1); print("Computer ID:"..tostring(os.computerID()));
  27. end
  28. end
  29. end
  30. getModem();
  31.  
  32. function split(text, delimeter)
  33. delimeter = delimeter or "\28";
  34. local data = {};
  35. for key in text:gmatch("([^"..delimeter.."]+)"..delimeter) do
  36. table.insert(data, key);
  37. end
  38. return data;
  39. end
  40.  
  41. function newUser(name, password, sender)
  42. local sFile = "./users/"..name;
  43. local bExist = fs.exists(sFile);
  44. if(bExist)then return "User already exists!"; end
  45. local hFile = fs.open(sFile, "w");
  46. hFile.write(password.."\28");
  47. hFile.close();
  48. for i = 1,#connectedIPs do
  49. if(connectedIPs[i][1] == sender)then
  50. connectedIPs[i][2]=name;
  51. print(connectedIPs[i][2].." created an account!");
  52. break;
  53. end
  54. end
  55. return 'success';
  56. end
  57.  
  58. function login(name, password, sender)
  59.  
  60. local sFile = "./users/"..name;
  61. local bExist = fs.exists(sFile);
  62. if(not bExist)then return "User doesn't exist!"; end
  63. local hFile = fs.open(sFile, "r");
  64. local password2 = unpack(split(hFile.readAll()));
  65. if(password2==password)then
  66. for i = 1,#connectedIPs do
  67. if(connectedIPs[i][1] == sender)then
  68. connectedIPs[i][2]=name;
  69. print(connectedIPs[i][2].." logged in!");
  70. break;
  71. end
  72. end
  73. return 'success';
  74. else
  75. return 'Incorrect Password!';
  76. end
  77. hFile.close();
  78. end
  79.  
  80. function handleIncomingConnection(sender, response, distance)
  81. print("==DATA SENT : "..sender.."==");
  82. if(response == 'connect')then
  83. print("User Connecting");
  84. while(true)do
  85. rednet.send(sender, "handshake");
  86. local eventData = {os.pullEvent("rednet_message")};
  87. if(eventData[2]==sender and eventData[3]=='connected')then
  88. for i = 1,#connectedIPs do
  89. if(connectedIPs[i][1] == sender)then
  90. table.remove(connectedIPs, i);
  91. end
  92. end
  93. table.insert(connectedIPs,{sender, "Guest"});
  94. print("User Connected")
  95. break;
  96. end
  97. end
  98. elseif(response == 'logout')then
  99. for i = 1,#connectedIPs do
  100. if(connectedIPs[i][1] == sender)then
  101. print(connectedIPs[i][2].." logged out!");
  102. connectedIPs[i][2]="Guest"; break;
  103. end
  104. end
  105. elseif(response == 'disconnect')then
  106. for i = 1,#connectedIPs do
  107. if(connectedIPs[i][1] == sender)then
  108. table.remove(connectedIPs,i); print("Disconnected!"); break;
  109. end
  110. end
  111. elseif(response:sub(1,1)=='*')then
  112. response = response:sub(2);
  113. local data = split(response);
  114. local key = data[1];
  115.  
  116. if(key == 'newaccount')then
  117. local username = data[2];
  118. local password = data[3];
  119. rednet.send(sender, newUser(username, password, sender));
  120.  
  121. elseif(key == 'loginaccount')then
  122. local username = data[2];
  123. local password = data[3];
  124. rednet.send(sender, login(username, password, sender));
  125. end
  126. else
  127. print(response);
  128. end
  129. print("==END DATA SENT==");
  130. end
  131.  
  132. local eventData;
  133. while(true)do
  134. eventData = {os.pullEvent()};
  135. if(eventData[1]=='rednet_message')then
  136. handleIncomingConnection(eventData[2], eventData[3], eventData[4]);
  137. elseif(eventData[1]=='key')then
  138. local key = eventData[2];
  139. if(key==25)then
  140. local cLogged = 0;
  141. for i = 1,#connectedIPs do
  142. if(connectedIPs[i][2]~="Guest")then
  143. cLogged = cLogged + 1;
  144. end
  145. end
  146. print("There is "..#connectedIPs.." player(s) connected!");
  147. print("There is "..cLogged.." player(s) logged in!");
  148.  
  149. elseif(key==46)then
  150. term.clear(); term.setCursorPos(1,1);
  151. end
  152. end
  153. end
Advertisement
Add Comment
Please, Sign In to add comment