import socket, struct, time, datetime
def ts(): return datetime.datetime.now().strftime("%H:%M:%S")
sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sk.bind(('0.0.0.0',5058))
print(f"[{ts()}] REJECT photon server on 5058 (disconnects everything)",flush=True)
def now_ms(): return int(time.time()*1000)&0xffffffff
while True:
    data,addr=sk.recvfrom(4096)
    if len(data)<12: continue
    peerId,crc,cmdCount=struct.unpack_from(">HBB",data,0)
    sentTime,challenge=struct.unpack_from(">II",data,4)
    # respond with a DISCONNECT command (type 4) so PhotonNetwork reports a hard failure
    disc=struct.pack(">BBBBII",4,0xff,0x00,0x04,12,0)
    hdr=struct.pack(">HBBII",1,0,1,now_ms(),challenge)
    sk.sendto(hdr+disc,addr)
    print(f"[{ts()}] <- {addr[1]} peer={peerId:#x} -> DISCONNECT",flush=True)
