39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import eventlet
|
|
from eventlet.green import socket
|
|
|
|
PORT = 3001
|
|
participants = set()
|
|
|
|
|
|
def read_chat_forever(writer, reader):
|
|
line = reader.readline()
|
|
while line:
|
|
print("Chat:", line.strip())
|
|
for p in participants:
|
|
try:
|
|
if p is not writer: # Don't echo
|
|
p.write(line)
|
|
p.flush()
|
|
except socket.error as e:
|
|
# ignore broken pipes, they just mean the participant
|
|
# closed its connection already
|
|
if e[0] != 32:
|
|
raise
|
|
line = reader.readline()
|
|
participants.remove(writer)
|
|
print("Participant left chat.")
|
|
|
|
try:
|
|
print("ChatServer starting up on port %s" % PORT)
|
|
server = eventlet.listen(('0.0.0.0', PORT))
|
|
while True:
|
|
new_connection, address = server.accept()
|
|
print("Participant joined chat.")
|
|
new_writer = new_connection.makefile('w')
|
|
participants.add(new_writer)
|
|
eventlet.spawn_n(read_chat_forever,
|
|
new_writer,
|
|
new_connection.makefile('r'))
|
|
except (KeyboardInterrupt, SystemExit):
|
|
print("ChatServer exiting.")
|