aboutsummaryrefslogtreecommitdiff
path: root/server/districtclient.py
diff options
context:
space:
mode:
authoroldmud0 <oldmud0@users.noreply.github.com>2018-11-10 23:15:54 -0600
committeroldmud0 <oldmud0@users.noreply.github.com>2018-11-10 23:15:54 -0600
commitde348c22d5f1287cc38734e6e3b77fc492629721 (patch)
treea0c57e47c29404ce1312bebf9528fdf0c62b2615 /server/districtclient.py
parent56ec03a23a0f687b79d3ce324e517563a41c0032 (diff)
Coalesce server changes into patch file (this is not a monorepo)
Diffstat (limited to 'server/districtclient.py')
-rw-r--r--server/districtclient.py79
1 files changed, 0 insertions, 79 deletions
diff --git a/server/districtclient.py b/server/districtclient.py
deleted file mode 100644
index c766ba5..0000000
--- a/server/districtclient.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# tsuserver3, an Attorney Online server
-#
-# Copyright (C) 2016 argoneus <argoneuscze@gmail.com>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-import asyncio
-
-from server import logger
-
-
-class DistrictClient:
- def __init__(self, server):
- self.server = server
- self.reader = None
- self.writer = None
- self.message_queue = []
-
- async def connect(self):
- loop = asyncio.get_event_loop()
- while True:
- try:
- self.reader, self.writer = await asyncio.open_connection(self.server.config['district_ip'],
- self.server.config['district_port'], loop=loop)
- await self.handle_connection()
- except (ConnectionRefusedError, TimeoutError):
- pass
- except (ConnectionResetError, asyncio.IncompleteReadError):
- self.writer = None
- self.reader = None
- finally:
- logger.log_debug("Couldn't connect to the district, retrying in 30 seconds.")
- await asyncio.sleep(30)
-
- async def handle_connection(self):
- logger.log_debug('District connected.')
- self.send_raw_message('AUTH#{}'.format(self.server.config['district_password']))
- while True:
- data = await self.reader.readuntil(b'\r\n')
- if not data:
- return
- raw_msg = data.decode()[:-2]
- logger.log_debug('[DISTRICT][INC][RAW]{}'.format(raw_msg))
- cmd, *args = raw_msg.split('#')
- if cmd == 'GLOBAL':
- glob_name = '{}[{}:{}][{}]'.format('<dollar>G', args[1], args[2], args[3])
- if args[0] == '1':
- glob_name += '[M]'
- self.server.send_all_cmd_pred('CT', glob_name, args[4], pred=lambda x: not x.muted_global)
- elif cmd == 'NEED':
- need_msg = '=== Cross Advert ===\r\n{} at {} in {} [{}] needs {}\r\n====================' \
- .format(args[1], args[0], args[2], args[3], args[4])
- self.server.send_all_cmd_pred('CT', '{}'.format(self.server.config['hostname']), need_msg, '1',
- pred=lambda x: not x.muted_adverts)
-
- async def write_queue(self):
- while self.message_queue:
- msg = self.message_queue.pop(0)
- try:
- self.writer.write(msg)
- await self.writer.drain()
- except ConnectionResetError:
- return
-
- def send_raw_message(self, msg):
- if not self.writer:
- return
- self.message_queue.append('{}\r\n'.format(msg).encode())
- asyncio.ensure_future(self.write_queue(), loop=asyncio.get_event_loop())