Handle autosetup and tell packets correctly.

This commit is contained in:
Greg Taylor 2009-04-20 22:34:16 +00:00
parent c18937d3ba
commit 2d6ef25081
2 changed files with 36 additions and 9 deletions

View file

@ -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 <servername> <serverpw> version=<version#> <networkname>
"""
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):
"""

View file

@ -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.