Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. """
  3. Usage:
  4. server.py [--nodb | --db TYPE]
  5.  
  6. Options:
  7. --nodb Don't use a database (Use a mock.Mock). Caution: Will break things.
  8. --db TYPE Use TYPE database driver [default: QMYSQL]
  9. """
  10.  
  11. import asyncio
  12.  
  13. import logging
  14. from server.protocol import QDataStreamProtocol
  15.  
  16. @asyncio.coroutine
  17. def connect_client(server):
  18. return QDataStreamProtocol(*(yield from asyncio.open_connection(*server)))
  19.  
  20. @asyncio.coroutine
  21. def get_session(proto):
  22. proto.send_message({'command': 'ask_session', 'user_agent': 'faf-client', 'version': '0.11.46'})
  23. yield from proto.drain()
  24. msg = yield from proto.read_message()
  25. return msg['session']
  26.  
  27. @asyncio.coroutine
  28. def perform_login(proto, credentials):
  29. login, pw = credentials
  30. proto.send_message({'command': 'hello',
  31. 'version': '1.0.0-dev',
  32. 'user_agent': 'faf-client',
  33. 'login': login,
  34. 'password': pw,
  35. 'unique_id': 'some_id'})
  36. yield from proto.drain()
  37.  
  38. @asyncio.coroutine
  39. def read_until(proto, pred):
  40. while True:
  41. msg = yield from proto.read_message()
  42. try:
  43. if pred(msg):
  44. return msg
  45. except (KeyError, ValueError):
  46. logging.getLogger().info("read_until predicate raised during message: {}".format(msg))
  47. pass
  48.  
  49. async def connect_and_sign_in(credentials, lobby_server):
  50. proto = await connect_client(lobby_server)
  51. session = await get_session(proto)
  52. await perform_login(proto, credentials)
  53. hello = await proto.read_message()
  54. player_id = hello['id']
  55. return player_id, session, proto
  56.  
  57. test_logins = [
  58. ]
  59.  
  60. if __name__ == '__main__':
  61. logger = logging.getLogger(__name__)
  62. try:
  63. loop = asyncio.get_event_loop()
  64.  
  65. async def derp(login, pw):
  66. proto = await connect_client(("test.faforever.com", 8001))
  67. session = await get_session(proto)
  68. await perform_login(proto, (login, pw))
  69. hello = await proto.read_message()
  70. player_id = hello['id']
  71. proto.send_message({'command': 'InitiateTest', 'target': 'connectivity', 'args': [6112]})
  72. proto.writer.close()
  73. return player_id, session, proto
  74.  
  75. async def derp2():
  76. for login, pw in test_logins:
  77. asyncio.ensure_future(derp(login, pw))
  78. await derp(*test_logins[0])
  79.  
  80. for i in range(1):
  81. print("Connecting {}".format(i))
  82. loop.run_until_complete(derp2())
  83. loop.close()
  84.  
  85. except Exception as ex:
  86. logger.exception("Failure booting server {}".format(ex))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement