Skip to content

Instantly share code, notes, and snippets.

@abhigenie92
Created April 8, 2016 21:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abhigenie92/56f34f9a977986113c4bf6527fc4d0bc to your computer and use it in GitHub Desktop.
Save abhigenie92/56f34f9a977986113c4bf6527fc4d0bc to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
from twisted.internet.protocol import Protocol, Factory
class StrokeEcho(Protocol):
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
print "Connected client:",self
self.factory.echoers.append(self)
def dataReceived(self, data):
for echoer in self.factory.echoers:
if echoer!=self:
echoer.transport.write(data)
def connectionLost(self, reason):
print "Client disconnected:",self.transport.getPeer()
if self.transport.getPeer()==server_public_ip:
self.factory.disconnectAll(self)
self.factory.echoers.remove(self)
class StrokeEchoFactory(Factory):
protocols=set([]) # empty set of all protocols
def __init__(self,server_room,server_public_ip,server_username):
self.echoers = []
self.server_room=server_room
self.server_public_ip=server_public_ip
def buildProtocol(self, addr):
protocol=StrokeEcho(self)
protocols.add(protocol)
return protocol
def disconnectAll(self, server_protocol):
self.protocols.remove(server_protocol) # pop the provided protocol out of the set
for protocol in self.protocols: # disconnect every other protocol in the protocols set
protocol.transport.loseConnection()
self.stopListening() # makes the opened port to closed down
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment