From 2d6ef25081c5835a5e84fa29f11217eb8932c032 Mon Sep 17 00:00:00 2001 From: Greg Taylor Date: Mon, 20 Apr 2009 22:34:16 +0000 Subject: [PATCH] Handle autosetup and tell packets correctly. --- src/imc2/connection.py | 32 ++++++++++++++++++++++++-------- src/session_mgr.py | 13 ++++++++++++- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/imc2/connection.py b/src/imc2/connection.py index ead2367bf9..3c2a591f7a 100644 --- a/src/imc2/connection.py +++ b/src/imc2/connection.py @@ -9,6 +9,7 @@ from twisted.internet import reactor, task from twisted.conch.telnet import StatefulTelnetProtocol from django.conf import settings from src import logger +from src import session_mgr from src.imc2.packets import * from src.imc2.trackers import * from src.imc2 import reply_listener @@ -66,16 +67,23 @@ class IMC2Protocol(StatefulTelnetProtocol): """ SERVER Sends: PW version= """ - if line[:2] == "PW": - line_split = line.split(' ') + line_split = line.split(' ') + pw_present = line_split[0] == 'PW' + autosetup_present = line_split[0] == 'autosetup' + + if pw_present: self.server_name = line_split[1] self.network_name = line_split[4] - self.is_authenticated = True - self.sequence = int(time()) - logger.log_infomsg("IMC2: Successfully authenticated to the '%s' network." % self.network_name) - # Let everyone know we've arrived. - #self.send_packet(IMC2PacketKeepAliveRequest()) - self.send_packet(IMC2PacketIsAlive()) + elif autosetup_present: + logger.log_infomsg("IMC2: Autosetup response found.") + self.server_name = line_split[1] + self.network_name = line_split[3] + self.is_authenticated = True + self.sequence = int(time()) + logger.log_infomsg("IMC2: Successfully authenticated to the '%s' network." % self.network_name) + # Let everyone know we've arrived. + self.send_packet(IMC2PacketIsAlive()) + #self.send_packet(IMC2PacketKeepAliveRequest()) def _handle_channel_mappings(self, packet): """ @@ -124,6 +132,14 @@ class IMC2Protocol(StatefulTelnetProtocol): reply_listener.handle_whois_reply(packet) elif packet.packet_type == 'close-notify': IMC2_MUDLIST.remove_mud_from_packet(packet) + elif packet.packet_type == 'tell': + sessions = session_mgr.find_sessions_from_username(packet.target) + for session in sessions: + session.msg("%s@%s IMC tells: %s" % + (packet.sender, + packet.origin, + packet.optional_data.get('text', + 'ERROR: No text provided.'))) class IMC2ClientFactory(ClientFactory): """ diff --git a/src/session_mgr.py b/src/session_mgr.py index 6c44455f70..2af3501ec8 100644 --- a/src/session_mgr.py +++ b/src/session_mgr.py @@ -2,7 +2,7 @@ Session manager, handles connected players. """ import time - +from django.contrib.auth.models import User from src.config.models import ConfigValue from src import logger from src.util import functions_general @@ -10,6 +10,17 @@ from src.util import functions_general # Our list of connected sessions. session_list = [] +def find_sessions_from_username(username): + """ + Given a username, return any matching sessions. + """ + try: + uobj = User.objects.get(username=username) + uid = uobj.id + return [session for session in session_list if session.uid == uid] + except User.DoesNotExist: + return None + def add_session(session): """ Adds a session to the session list.