2013-10-26 3 views
0

Я выполнил следующий учебник (http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server), и я получил код, который вы можете увидеть ниже. Этот код позволяет неограниченному количеству клиентов подключаться к чату. Я хочу ограничить это количество клиентов, чтобы не более двух пользователей могли общаться в одном чате.Ограничить количество пользователей в чате с помощью витой розетки

Для этого мне просто нужно знать одно: как получить уникальный идентификатор для каждого клиента. Который может использоваться позже, в функции for c in self.factory.clients: c.message(msg), чтобы отправить сообщение клиенту, которого я хочу.

Буду признателен за любой взнос!

# Import from Twisted 
from twisted.internet.protocol import Factory, Protocol 
from twisted.internet import reactor 

# IphoneChat: our own protocol 
class IphoneChat(Protocol): 

    def connectionMade(self): 
     self.factory.clients.append(self) 
     print "Clients are ", self.factory.clients 

    def connectionLost(self, reason): 
     self.factory.clients.remove(self) 

    def dataReceived(self, data): 
     a = data.split(':') 
     print a 

     if len(a) > 1: 
      command = a[0] 
      content = a[1] 

      msg = "" 
      if command == "iam": 
       self.name = content 

      elif command == "msg": 
       msg = self.name + ": " + content 

       for c in self.factory.clients: 
        c.message(msg) 

    def message(self, message): 
     self.transport.write(message + '\n') 


# Factory: handles all the socket connections 
factory = Factory() 
factory.clients = [] 
factory.protocol = IphoneChat 

# Reactor: listens to factory 
reactor.listenTCP(80, factory) 
print "Iphone Chat server started" 
reactor.run(); 

ответ

1

Попробуйте это: в connectionMade, если количество клиентов уже 2, закройте новое соединение:

if len(self.factory.clients) == 2: 
    self.transport.loseConnection() 
+0

Но, делая это, не будет больше, чем один Chatroom. Итак, если 4 пользователя используют чат, с этим кодом они не смогут иметь две параллельные беседы, не так ли? –

Смежные вопросы