--- /dev/null
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2013 Malte Bublitz.
+#
+
+from twisted.internet.protocol import Factory
+from twisted.protocols.basic import LineReceiver
+from twisted.internet import reactor
+
+class ChatProtocol(LineReceiver):
+ def connectionMade(self):
+ self.delimiter = '\n'
+ self.userName = None
+
+ def lineReceived(self, line):
+ print line
+ if line.startswith("ENTER"):
+ print self.userName+" entered"
+ self.broadcastLine("%s entered the room." % self.userName)
+ elif line.split(" ")[0]=="NAME":
+ self.userName = " ".join(line.split(" ")[1:]).strip()
+ print "known as "+self.userName
+ self.factory.users[self.userName] = self
+ elif line.split(" ")[0]=="ALL":
+ self.broadcastLine("<%s> %s" % (self.userName, " ".join(line.split(" ")[1:])))
+ elif line.startswith("EXIT"):
+ self.broadcastLine("%s leaved the room." % self.userName)
+ elif line.split(" ")[0] == "ONE":
+ self.factory.users[line.split(" ")[1]].sendLine("P<"+self.userName+"> "+" ".join(line.split(" ")[2:]))
+ else:
+ self.sendLine("UNKNOWN COMMAND")
+
+ def ConnectionLost(self, reason):
+ if self.userName is not None and self.userName in self.factory.users:
+ del self.factory.users[self.userName]
+
+ def broadcastLine(self, line):
+ for client in self.factory.users.itervalues():
+ client.sendLine(line)
+
+factory = Factory()
+factory.protocol = ChatProtocol
+factory.users = {}
+reactor.listenTCP(7070, factory)
+reactor.run()