У меня есть простой чат-сервер на основе python telnet, которому не хватает функциональности, позволяющей пользователям устанавливать имена пользователей.Полный сценарий находится здесь: http://paste.pound -python.org / show / 16076 /
В основном я создаю свой слушатель:
self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.srvsock.bind( ('', port ) )
self.srvsock.listen( 5 )
self.descriptors = [ self.srvsock ]
Затем я использую select.select циклически перебирать подключенных пользователей и отправлять им сокеты:
def run( self ):
while 1:
( sread, swrite, sexec ) = select.select( self.descriptors, [], [] )
for sock in sread:
if sock == self.srvsock:
self.accept_new_connection()
else:
str = sock.recv( 6042 )
host, port = sock.getpeername()
if str == '':
#stop user connect
elif '\username' in str:
self.set_username( str, sock, port )
else:
#send user string
Мой вопрос связан с созданным мною методом self.set_username, мне нужен способ установить имя пользователя и сохранить его в сокете пользователяи ссылаться на это.Мой метод set_username () выглядит следующим образом:
def set_username( self, str, sock, port ):
username = str[ str.find(' ')+1: ]
sock.append( {'username': username} ) #<!!!--obviously this does not work
str = "[user:%s] now known as %s" % ( port, username )
sock.send( str )
self.broadcast_string( str )
Как я могу сделать это успешно?