Created
April 8, 2016 21:54
-
-
Save abhigenie92/56f34f9a977986113c4bf6527fc4d0bc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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