From 6c06952290c3637dcb006a289d65264be0493c95 Mon Sep 17 00:00:00 2001 From: Madiwka Date: Mon, 24 Aug 2020 00:05:15 +0600 Subject: [PATCH] Server release --- README.md | 8 +++++ server.lua | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 README.md create mode 100644 server.lua diff --git a/README.md b/README.md new file mode 100644 index 0000000..9d3e9b8 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# NuclearServer +A server lua script for NuclearPong. + +# Usage +Just launch it with Lua. Requires lua and lua-socket. +``` +lua server.lua +``` diff --git a/server.lua b/server.lua new file mode 100644 index 0000000..0ba2314 --- /dev/null +++ b/server.lua @@ -0,0 +1,103 @@ +local running = true +local socket = require 'socket' +local udp = socket.udp() +local player1ip, player2ip, player1port, player2port = "none", "none", nil, nil +udp:settimeout(0) +udp:setsockname('*', 12345) +local p1ping = 0 +local p2ping = 0 +local requesterip +local requresterport +while running do + local data, msg_or_ip, port_or_nil + local p1data, p2data + repeat + + data, msg_or_ip, port_or_nil = udp:receivefrom() + if data then + + if data == "HELLO" then + requesterip = msg_or_ip + requesterport = port_or_nil + else + print(string.sub(data,1,1) .. "Playerlist: " .. player1ip .. " " .. player2ip) + if (player1ip == msg_or_ip) then + p1ping = 0 + p1data = data + elseif player2ip == msg_or_ip then + p2data = data + p2ping = 0 + else + if (player1ip == "none") then + player1ip = msg_or_ip + p1data = data + p1ping = 0 + player1port = port_or_nil + print("CONNECTED: PLAYER 1 FROM: " .. player1ip) + elseif player2ip == "none" and msg_or_ip ~= player1ip then + player2ip = msg_or_ip + p2data = data + p2ping = 0 + player2port = port_or_nil + print("CONNECTED: PLAYER 2 FROM: " .. player2ip) + elseif (player1ip ~= msg_or_ip and player2ip ~= msg_or_ip) then + print("Lobby Full!" .. player1ip .. player2ip) + end + end + + end + end + until not data + if player1ip ~= "none" then + p1ping = p1ping + 1 + if p1ping > 100 then + if p2data then + udp:sendto(p2data .. '|' .. p1ping, player1ip, player1port) + end + print("PLAYER 1 DISCONNECTED") + p1data = nil + player1ip = "none" + player1port = nil + end + end + if player2ip ~= "none" then + p2ping = p2ping + 1 + if p2ping > 100 then + if p1data then + udp:sendto(p1data .. '|' .. p2ping, player2ip, player2port) + end + print("PLAYER 2 DISCONNECTED") + p2data = nil + player2ip = "none" + player2port = nil + end + end + if p1data and player2port then + udp:sendto(p1data .. '|' .. p2ping, player2ip, player2port) + print("SENT TO " .. player2ip .. ":" .. player2port .. " : " .. string.sub(p1data,1,1)) + end + if p2data and player1port then + udp:sendto(p2data .. '|' .. p1ping, player1ip, player1port) + print("SENT TO " .. player1ip .. ":" .. player1port .. " : " .. string.sub(p2data,1,1)) + --print("1::" .. p1data) + --print("2::" .. p2data) + --print("SENT1: " .. player2ip .. " " .. player2port .. " " .. p1data) + --print("SENT2: " .. player1ip .. " " .. player1port .. " " .. p2data) + end + if requesterip then + print("getting pnged!") + if player1ip == "none" then + udp:sendto("nettest",requesterip, requesterport) + print("nettest av to: " .. requesterip) + elseif player2ip == "none" then + udp:sendto("clienttest", requesterip, requesterport) + print("clienttest av to: " .. requesterip) + else + udp:sendto("full", requesterip, requesterport) + print("full to: " .. msg_or_ip) + end + requesterip, requesterport = nil + end + socket.sleep(0.015) + +end \ No newline at end of file