diff --git a/client.py b/client.py new file mode 100644 index 0000000..b43f5e0 --- /dev/null +++ b/client.py @@ -0,0 +1,50 @@ +import sys +from PodSixNet.Connection import connection +from PodSixNet.Connection import ConnectionListener +import time +import threading +import os +#os.system('cls' if os.name == 'nt' else 'clear') +name = input("name: ") +queue = [] +recorded = [] +temp = 0 +class MyNetworkListener(ConnectionListener): + def __init__(self, host, port): + self.Connect((host, port)) + + def Network_queuesync(self, data): + global temp + temp = 0 + global queue + queue = data["queue"] + +connection2 = MyNetworkListener(input("host: "), int(input("port: "))) +data = {"action": "setname", "name":name} +connection2.Send(data) +def chatloop(): + global connection2 + global recorded + while True: + for line in sys.stdin: + os.system('cls' if os.name == 'nt' else 'clear') + for i in recorded: + print(i) + data = {"action": "send", "message": line} + connection2.Send(data) +threading.Thread(target=chatloop).start() +while True: + for i in queue: + print(i) + recorded.append(i) + queue.remove(i) + connection2.Pump() + connection.Pump() + if temp >= 100: + print("lost connection to server.") + exit() + exit() + temp += 1 + time.sleep(0.001) + + \ No newline at end of file diff --git a/server.py b/server.py new file mode 100644 index 0000000..3072082 --- /dev/null +++ b/server.py @@ -0,0 +1,79 @@ +from PodSixNet.Channel import Channel +from PodSixNet.Server import Server +import time +import sys +import threading +chatters = {} +queue = [] +banned = [] + +def tostring(target): + temp = "" + for i in range(len(target)): + index = i + i = target[i] + if index != len(target)-1: + temp = temp + i + " " + else: + temp = temp + i + return temp + +class clientchannel(Channel): + def __init__(self, conn=None, addr=..., server=None, map=None): + super().__init__(conn, addr, server, map) + self.name = "Unknown" + + def Network_send(self, data): + global queue + queue.append("{}:{}".format(self.name, data["message"])) + + def Network_setname(self, data): + global queue + global banned + if data["name"] in banned: + queue.append("{} is banned, disconnecting".format(data["name"])) + self.close() + queue.append("{} joined!".format(data["name"])) + global chatters + chatters[data["name"]] = self + self.name = data["name"] + +class server(Server): + channelClass = clientchannel + + def __init__(self, *args, **kwargs): + Server.__init__(self, *args, **kwargs) + + def Connected(self, channel, addr): + global chatters + chatters[channel.name] = channel + +gameserver = server(localaddr=("localhost", 2003)) +def chatloop(): + global queue + global chatters + while True: + cmd = input() + cmd2 = cmd.split() + if cmd2[0] == "kick": + cmd2.remove(cmd2[0]) + cmd = tostring(cmd2) + queue.append("{} has been kicked".format(cmd)) + chatters[cmd].close() + chatters.pop(cmd) + if cmd2[0] == "ban": + cmd2.remove(cmd2[0]) + cmd = tostring(cmd2) + queue.append("{} has been banned".format(cmd)) + chatters[cmd].close() + banned.append(cmd) + chatters.pop(cmd) +threading.Thread(target=chatloop).start() +while True: + for i in chatters: + chatters[i].Send({"action": "queuesync", "queue": queue}) + for i in queue: + print(i) + queue.remove(i) + gameserver.Pump() + time.sleep(0.001) \ No newline at end of file