Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import asyncio
  3.  
  4. clients = []
  5.  
  6. class SimpleChatClientProtocol(asyncio.Protocol):
  7. def connection_made(self, transport):
  8. self.transport = transport
  9. self.peername = transport.get_extra_info("peername")
  10. print('Подключился: {}'.format(self.peername))
  11. clients.append(self)
  12.  
  13. def data_received(self, data):
  14. print('{} отправил: {}'.format(self.peername, data.decode()))
  15. for client in clients:
  16. if client is not self:
  17. client.transport.write(data)
  18.  
  19. def connection_lost(self, ex):
  20. print('Отключился: {}'.format(self.peername))
  21. clients.remove(self)
  22.  
  23.  
  24. # Цикл событий невозможно прервать, если в нём
  25. # не происходят события. Чтобы избежать этого
  26. # регистрируем в цикле фунцию, которая будет
  27. # вызываться раз в секунду.
  28. def wakeup():
  29. loop = asyncio.get_event_loop()
  30. loop.call_later(1, wakeup)
  31.  
  32.  
  33. if __name__ == '__main__':
  34. print('Запуск...')
  35.  
  36. # Получаем цикл событий
  37. loop = asyncio.get_event_loop()
  38. # Регистрируем "отлипатель"
  39. loop.call_later(1, wakeup)
  40. # Создаём асинхронную сопрограмму-протокол
  41. coro = loop.create_server(SimpleChatClientProtocol, host='localhost', port=1080)
  42. # Регистрируем её в цикле событий на выполнение
  43. server = loop.run_until_complete(coro)
  44.  
  45. for socket in server.sockets:
  46. print('Сервер запущен на {}'.format(socket.getsockname()))
  47. print('Выход по Ctrl+C\n')
  48.  
  49. try:
  50. loop.run_forever() # Запускаем бесконечный цикл событий
  51. except KeyboardInterrupt: # Программа прервана нажатием Ctrl+C
  52. pass
  53. finally:
  54. server.close() # Закрываем протокол
  55. loop.run_until_complete(server.wait_closed()) # Асинхронно ожидаем окончания закрытия
  56. loop.close() # Закрываем цикл событий
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement