local running = true
local socket = require 'socket'
local udp = socket.udp()
local player1ip, player2ip, p1data, p2data, player1port, player2port = "none", "none", nil, nil, nil, nil
udp:settimeout(0)
udp:setsockname('*', 12345)
local p1ping = 0
local p2ping = 0
local data, msg_or_ip, port_or_nil
while running do 
    data, msg_or_ip, port_or_nil = udp:receivefrom()
    if data then 
        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
                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
                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


    elseif player1ip ~= "none" then 
        p1ping = p1ping + 1
        if p1ping > 5 then
            if p2data then  
            udp:sendto(p2data .. '|' .. p1ping, player1ip, player1port)
            end
            print("PLAYER 1 DISCONNECTED")
            p1data = nil 
            player1ip = "none"
            player1port = nil
        end
    elseif player2ip ~= "none" then 
        p2ping = p2ping + 1
        if p2ping > 5 then 
            if p1data then 
            udp:sendto(p1data .. '|' .. p2ping, player2ip, player2port)
            end
            print("PLAYER 2 DISCONNECTED")
            p2data = nil 
            player2ip = "none"
            player2port = nil
        end
    end
    if data then 
        print(data .. "FROM " .. msg_or_ip .. "Playerlist: " .. player1ip .. " " .. player2ip)
    end
	if p1data and p2data then
        udp:sendto(p1data .. '|' .. p2ping, player2ip, player2port)
        udp:sendto(p2data .. '|' .. p1ping, player1ip, player1port)
        print("SENT1: " .. player2ip .. " " .. player2port .. " " .. p1data)
        print("SENT2: " .. player1ip .. " " .. player1port .. " " .. p2data)
    end
    socket.sleep(0.01)
end