From 8e09d59ee4ac32f6a5c6dcb0cfba8ca5fbcac45a Mon Sep 17 00:00:00 2001 From: Wayne Colin Abel Date: Tue, 16 Jul 2019 12:26:26 +0200 Subject: [PATCH] [refactor] Klasse in IRCServer umbenannt, Client und conftest angepasst --- conftest.py | 4 ++-- src/server.py | 56 ++++++++++++++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 23 deletions(-) mode change 100644 => 100755 src/server.py diff --git a/conftest.py b/conftest.py index 086ca95..083f50b 100644 --- a/conftest.py +++ b/conftest.py @@ -9,5 +9,5 @@ def server(): """ returns a fresh server instance """ - from src.server import Handler_TCPServer - return Handler_TCPServer + from src.server import RequestHandler + return RequestHandler diff --git a/src/server.py b/src/server.py old mode 100644 new mode 100755 index 3031407..c53f100 --- a/src/server.py +++ b/src/server.py @@ -1,44 +1,58 @@ -import socketserver - +#!/usr/bin/python -class Handler_TCPServer(socketserver.BaseRequestHandler): - """ - The TCP Server class for demonstration. +import socketserver - Note: We need to implement the Handle method to exchange data - with TCP client. - """ +class RequestHandler(socketserver.BaseRequestHandler): def handle(self): # self.request - TCP socket connected to the client + print("Hl") self.data = self.request.recv(1024).strip() print("{} sent:".format(self.client_address[0])) - print(self.data) + print(self.data.decode()) # just send back ACK for data arrival confirmation self.request.sendall("ACK from TCP Server".encode()) def ping(self, param): return "PONG" - def command_pass(self, param): - return param == self.password + def command_pass(self, desired_password): + return desired_password == self.password - def command_nickname(self, nickname): - if nickname not in self.user_list: - self.user_list.append(nickname) + def command_nickname(self, user, desired_nickname): + + if desired_nickname not in self.user_list: + self.user_list.append(desired_nickname) + self.user_list.remove(user) + message = ":" + user + " NICK " + desired_nickname return True else: - return False + self.user_list.remove(desired_nickname) + if user in self.user_list: + self.user_list.remove(user) + # issue kill command (?) + return True +class IRCServer(socketserver.TCPServer): + """ + The TCP Server class for demonstration. + + Note: We need to implement the Handle method to exchange data + with TCP client. + + """ + + def __init__(self, server_adress): + self.servername = 'localhost' + self.channels = {} + self.clients = {} + socketserver.TCPServer.__init__(self, server_adress, RequestHandler) + if __name__ == "__main__": HOST, PORT = "localhost", 9999 - # Init the TCP server object, bind it to the localhost on 9999 port - tcp_server = socketserver.TCPServer((HOST, PORT), Handler_TCPServer) - - # Activate the TCP server. - # To abort the TCP server, press Ctrl-C. - tcp_server.serve_forever() + ircserver = IRCServer((HOST, PORT)) + ircserver.serve_forever()