Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. def broadcastMessage(self, message):
  2. print list(self.factory.users.iteritems())
  3.  
  4. for name, protocol in self.factory.users.iteritems():
  5. if protocol != self:
  6. protocol.sendLine(message)
  7.  
  8. from twisted.internet import protocol, reactor
  9. from twisted.protocols.basic import LineReceiver
  10.  
  11. class ChatProtocol(LineReceiver):
  12. def __init__(self, factory):
  13. self.factory = factory
  14. self.name = None
  15. self.state = "REGISTER"
  16.  
  17. def connectionMade(self):
  18. self.sendLine("What's your name?")
  19.  
  20. def connectionLost(self, reason):
  21. if self.name in self.factory.users:
  22. del self.factory.users[self.name]
  23. self.broadcastMessage("%s has left the channel." % (self.name,))
  24.  
  25. def lineReceived(self, line):
  26. if self.state == "REGISTER":
  27. self.handle_REGISTER(line)
  28. else:
  29. self.handle_CHAT(line)
  30.  
  31. def handle_REGISTER(self, name):
  32. if name in self.factory.users:
  33. self.sendLine("Name taken, please choose another.")
  34. return
  35. self.sendLine("Welcome, %s!" % (name,))
  36. self.broadcastMessage("%s has joined the channel." % (name,))
  37. self.name = name
  38. self.factory.users[name] = self
  39. self.state = "CHAT"
  40.  
  41. def handle_CHAT(self, message):
  42. message = "<%s> %s" % (self.name, message)
  43. self.broadcastMessage(message)
  44.  
  45. def broadcastMessage(self, message):
  46. for name, protocol in self.factory.users.iteritems():
  47. if protocol != self:
  48. protocol.sendLine(message)
  49.  
  50. class ChatFactory(protocol.Factory):
  51. def __init__(self):
  52. self.users = {}
  53.  
  54. def buildProtocol(self, addr):
  55. return ChatProtocol(self)
  56.  
  57. reactor.listenTCP(8000, ChatFactory())
  58. reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement