|
@@ -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 |