rendered paste bodyimport socket
import select
import string
import os
import sys
def disconnect(s):
rlist.remove(s)
wlist.remove(s)
nicktbl.pop(s)
buftbl.pop(s)
def handle_new_connection():
s,addr = ssock.accept()
s.setblocking(0)
rlist.append(s)
wlist.append(s)
nicktbl[s] = None
buftbl[s] = ""
s.send("Welcome to Crazy-Chat.\n")
s.send("Please, type a nick: ")
def get_nick(s):
nick = s.recv(64)
test = nicktbl.values()
if nick == '':
disconnect(s)
return ''
nick = string.strip(nick)
s.send("Welcome, %s. ;)\n" % nick)
return nick
def get_msg(nick, s):
msg = s.recv(512)
if msg == '':
disconnect(s)
return
msg = "<%s> %s\n" % (nick, string.strip(msg))
for x in buftbl:
if x != s:
buftbl[x] += msg
def send_buf(s):
try:
if buftbl[s] != '':
n = s.send(buftbl[s])
if n < 0:
disconnect(s)
return
buftbl[s] = buftbl[s][n:]
except:
pass
ssock = socket.socket()
ssock.bind(("0.0.0.0", 7000))
ssock.listen(5)
ssock.setblocking(0)
rlist = [ ssock ]
wlist = [ ]
nicktbl = { }
buftbl = { }
while True:
r,w,e = select.select(rlist, wlist, [])
for x in r:
if x == ssock:
handle_new_connection()
else:
if nicktbl[x] == None:
nicktbl[x] = get_nick(x)
else:
get_msg(nicktbl[x], x)
for x in w:
send_buf(x)