-ν ™Ί‘;csdZ dkZ eieƒdZdkZdkZdkZdkZdeifd„ƒYZ cdei fd„ƒYZ Že djondk Z ‘ee iƒdjo’eie idƒZn ”d Z–e d eƒZ—eiƒndS( s;$Id: chat_server.py,v 1.6 2000/06/01 00:35:51 rushing Exp $Nis chat_channelcs†d„Zd„Z!d„Z3d„Z>d„ZKd„ZQeZSd„ZVd„ZYd „Z ]d „Z RS( Ncsmtii||ƒ||_||_|idƒd|_t |_ |i dƒdS(Ns ss nickname?: ( sasynchats async_chats__init__sselfssocksserversaddrsset_terminatorsdatasNonesnickspush(sselfsserverssocksaddr((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys__init__s    cs|i||_dS(N(sselfsdata(sselfsdata((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pyscollect_incoming_datascsΪ!"|i}#d|_$|itjoX%ti|ƒd|_&|i o 't|_(|idƒn*|iƒnQ,| o-n?.|ddjo/|i i ||ƒn1|i |ƒdS(Nsishuh? gimmee a nickname: s/( sselfsdataslinesnicksNonesstringssplitspushsgreetsservers push_lineshandle_command(sselfsline((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pysfound_terminator!s    csΦ34|id|iƒ5t|iiƒd}6|djo7|idƒn|9|idt|iiƒdƒ:td„|iiiƒƒ};|it i |dƒdƒ<|ii |d ƒdS( Ns Hello, %s iis3[Kinda lonely in here... you're the only caller!] s[There are %d other callers] cs :|iƒS(N(sxsget_nick(sx((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys:ss s s[joined]( sselfspushsnickslensserverschannelss num_channelssmapskeyssnickssstringsjoins push_line(sselfs num_channelssnicks((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pysgreet3s$! cs·>?dk}@ti|ƒ}Ad|dd}Bt||ƒojDt||ƒ}Et |ƒt |i ƒjoF|GHG||dƒnI|i d|dƒndS(Nscmd_%siisunknown command: %s( stypessstringssplitscommands command_linesnameshasattrsselfsgetattrsmethodstypeshandle_commandspush(sselfscommands command_linesmethodstypessname((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pyshandle_command>s cs:KL|ii|dƒM|idƒN|iƒdS(Ns[left]s Goodbye! (sselfsservers push_linespushsclose_when_done(sselfsargs((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pyscmd_quitKscs!ST|id||fƒdS(Ns%s: %s (sselfspushsnicksline(sselfsnicksline((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys push_lineSscsVW|iƒdS(N(sselfsclose(sself((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys handle_closeVscs*YZ|ii|=[tii|ƒdS(N(sselfsserverschannelssasynchats async_chatsclose(sself((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pyscloseYscs/]^|itj o_|iSnadSdS(NsUnknown(sselfsnicksNone(sself((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pysget_nick]s( s__init__scollect_incoming_datasfound_terminatorsgreetshandle_commandscmd_quitscmd_qs push_lines handle_closesclosesget_nick(((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys chat_channels       s chat_servercsfcedeZgeZidZkddd„Ztd„Zzd„Z‚d„Z‹d „Z RS( NsChat Server (V%s)isiF!cskl||_m|ititiƒn|i||fƒod|i|fGHp|i dƒqh|_ rd|_ dS(Ns%s started on port %dii( sportsselfs create_socketssocketsAF_INETs SOCK_STREAMsbindsips SERVER_IDENTslistenschannelsscount(sselfsipsport((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys__init__ks  csntu|iƒ\}}v|id|_wd|i|d|dfGHxd|i|i|||ƒ%ss
Listening on Port: %ds
Total Sessions: %ds
Current Sessions: %d( sselfs SERVER_IDENTsportscountslenschannelsslinessstatus_handlerslines_producer(sselfslines((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pysstatus‚s7cs‹ŒdSdS(Ni((sself((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pyswritable‹s( sVERSIONs SERVER_IDENTs chat_channels channel_classsspys__init__s handle_accepts push_linesstatusswritable(((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys chat_servercs      s__main__iiF!s(sRCS_IDsstringssplitsVERSIONssocketsasyncoresasynchatsstatus_handlers async_chats chat_channels dispatchers chat_servers__name__ssysslensargvsatoisportsssloop( sVERSIONsasynchatsasyncoresstringsRCS_IDssyssss chat_serversstatus_handlers chat_channelsportssocket((sJ/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/chat_server.pys?s      P+