Plugin For Bililive_dm, Forward DanmuInfo By Socket
这个插件通过Socket转发弹幕数据, 默认端口
9999
转发的数据为完整的bililive_dm的弹幕结构体, 结构为
正文: 4byte的数据长度(大端) + 弹幕数据 心跳包: 4byte的数据长度(大端) + "Heartbeat"
连接成功后, 为了判断Client状态, 插件会每秒发一次HC, 不需要Client回复, 发送失败则表示Client断连
async def listen_client():
reader, writer = await asyncio.open_connection('127.0.0.1', 9999)
print("server connected, listen...")
try:
while True:
length_data = await reader.read(4)
if not length_data:
print("server disconnected")
break
length = int.from_bytes(length_data, byteorder='big')
print(f"pkt len: {length}")
received = 0
message = bytearray()
while received < length:
chunk = await reader.read(length - received)
if not chunk:
raise ConnectionError("disconnected, not finish")
message.extend(chunk)
received += len(chunk)
message = message.decode('utf-8')
if message == 'Heartbeat':
continue
print(f"msg: {message}")
data = json.loads(message)
print(json.dumps(data, ensure_ascii=False, indent=4))
except Exception as e:
traceback.print_exc()
print(f"err: {e}")
finally:
writer.close()
await writer.wait_closed()
print("disconnected")