json.dumps(self._states)])
await self._call('setze', [comessage_guid, 'comessage_ready',
True])
- if ('state' in message and
- message['sender'] in self.conf['states']):
- self._states[message['sender']] = message['state']
+ if 'state' in message:
+ if message['sender'] in self.conf['states']:
+ self._states[message['sender']] = message['state']
+ elif ('original sender' in message and
+ message['original sender'] in self.conf['states']):
+ self._states[message['original sender']] = message['state']
+
+ async def _open_connection(self):
+ (self._reader, self._writer) = await asyncio.open_connection(
+ self._host, self._port, ssl=self._ssl_ctx)
+ self._writer.transport.set_write_buffer_limits(0)
+ # Read banner:
+ banner_size = await self._reader.readexactly(4)
+ banner_size = struct.unpack('<i', banner_size)[0]
+ banner_message = await self._reader.readexactly(banner_size)
+ # Get node instance:
+ self._call_id = 0
+ self._coroot_guid = await self._call('attributsknoten',
+ ['coroot_name',
+ self.conf['name']])
async def _call(self, method, params):
await self._lock.acquire()
+ while self._writer.is_closing():
+ await self._open_connection()
self._call_id += 1
request = {'jsonrpc': '2.0', 'method': method,
'params': params, 'id': self._call_id}
f"'{self.conf['crt']}'.")
self._ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
self._ssl_ctx.load_cert_chain(self.conf['crt'])
- self._call_id = 0
sends = []
receives = []
receives.append(MessageTemplate({'target': {'const': self.name},
sends, receives, self._receive)
async def run(self) -> None:
- """Open connection and get node instance for name."""
+ """Open connection and get coroot instance for name."""
self._lock = asyncio.Lock()
- (self._reader, self._writer) = await asyncio.open_connection(
- self._host, self._port, ssl=self._ssl_ctx)
- # Read banner:
- banner_size = await self._reader.readexactly(4)
- banner_size = struct.unpack('<i', banner_size)[0]
- banner_message = await self._reader.readexactly(banner_size)
- # Get node instance:
- self._coroot_guid = await self._call('attributsknoten',
- ['coroot_name',
- self.conf['name']])
+ self._open_connection()