From f8813485d313ba4f9970770509a020be77afc0a0 Mon Sep 17 00:00:00 2001 From: swee <meow@swee.codes> Date: Wed, 2 Apr 2025 23:33:58 -0700 Subject: [PATCH] Update server.py --- server.py | 62 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/server.py b/server.py index b29e581..caf8392 100644 --- a/server.py +++ b/server.py @@ -252,41 +252,59 @@ def multiserverhost(sock, client): try: threading.Thread(target=multiserverpinger, args=[sock]).start() global sessions + global cache_properties sessions[client[0]] = sock + cache_properties[client[0]] = {} global channels_list global property_list global nickname_list global topic_list if sock.recv(2048).decode() == "meow": - sock.sendall("woem") + sock.sendall(bytes("woem", "UTF-8")) else: - raise Exception("Something wrong happened") + raise Exception("This isn't an IRCat server!!") while True: txt = fnet.decrypt(sock.recv(2048)).decode() - if txt.split(" ")[0] == "VERIFYUSER": - nck = txt.split(" ")[1] - usr = json.loads(" ".join(txt.split(" ")[2:])) - property_list[nck] = usr - nickname_list[nck] = "external" - lower_nicks[nck.lower()] = usr - users_externalservers[nck] = client[0] - elif txt.split(" ")[0] == "SND": - property_list[txt.split(" ")[1]]["pendingSend"] += " ".join(txt.split(" ")[2:]) - elif txt.split(" ")[0] == "CNGPROP": - nck = txt.split(" ")[1] - usr = json.loads(" ".join(txt.split(" ")[2:])) - property_list[nck] = usr - elif txt.split(" ")[0] == "CNGNICK": - nck = txt.split(" ")[1] - nnck = txt.split(" ")[2] - nickname_list[nnck] = nickname_list.pop(nck) - property_list[nnck] = property_list.pop(nck) - del lower_nicks[nck.lower()] - lower_nicks[nnck.lower()] = nnck + if txt.split(" ")[0] == "VERIFYUSER": # When a user from a different server logs in + nck = txt.split(" ")[1] # Nickname + usr = json.loads(" ".join(txt.split(" ")[2:])) # New JSON properties + property_list[nck] = usr # Add the properties + nickname_list[nck] = {"external": client[0]} # Add the nickname indicating it's external + lower_nicks[nck.lower()] = usr # Add the lowercase nickname + users_externalservers[nck] = client[0] # + """ + elif txt.split(" ")[0] == "COLLIDE": # Fix connection collision, choose which server would have the outgoing connection. + if multi_server == "loner": + sock.sendall(fnet.encrypt(bytes("THIS", "UTF-8"))) # Keep this connection + elif random.randint(0,1): + sock.sendall(fnet.encrypt(bytes("THAT", "UTF-8"))) # Move to other connection + time.sleep(3) + raise Exception("THAT sent, closing.") # Close the connection + else: + sock.sendall(fnet.encrypt(bytes("THIS", "UTF-8"))) # Keep this connection + """ # We won't need colliding, they will connect to eachother. + elif txt.split(" ")[0] == "SPLIT": # When the remote host realizes it doesn't have an outgoing connection to this server. + + elif txt.split(" ")[0] == "SND": # When a token was sent by another server + property_list[txt.split(" ")[1]]["pendingSend"] += " ".join(txt.split(" ")[2:]) # Send the text to the specified user + elif txt.split(" ")[0] == "CNGPROP": # When properties changed on another server + nck = txt.split(" ")[1] # Nickname + usr = json.loads(" ".join(txt.split(" ")[2:])) # JSON + property_list[nck] = usr # Change the JSON... + cache_properties[client[0]][nck] = usr # ...And cache it + elif txt.split(" ")[0] == "CNGNICK": # When nick changed on another server + nck = txt.split(" ")[1] # Old nickname + nnck = txt.split(" ")[2] # New nickname + nickname_list[nnck] = nickname_list.pop(nck) # Move old nickname from list + property_list[nnck] = property_list.pop(nck) # Move properties... + cache_properties[client[0]][nnck] = cache_properties[client[0]].pop(nck) # ...And cache it + del lower_nicks[nck.lower()] # Remove the old lowercase nickname... + lower_nicks[nnck.lower()] = nnck # ...And replace it elif txt == "PING": sock.sendall(fnet.encrypt(bytes("PONG", "UTF-8"))) finally: netsplit(client[0]) + sock.close() def session(connection, client, ip, isssl=False): global channels_list global property_list