summaryrefslogtreecommitdiff
path: root/gui-wm/wayfire/tests/render-regression/ipc.py
blob: 1120399cd67ced7953afddcf5c078e1998fd1213 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import json
import os
import socket
import struct
from pathlib import Path

ENV = os.environ.copy()

def ipc(method, data=None):
    with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock:
        sock.settimeout(10)
        sock.connect(ENV['WAYFIRE_SOCKET'])
        payload = json.dumps({'method': method, 'data': data or {}}).encode()
        sock.sendall(struct.pack('<I', len(payload)) + payload)
        def read(n):
            result = b''
            while len(result) < n:
                chunk = sock.recv(n - len(result))
                if not chunk:
                    raise RuntimeError('IPC disconnected')
                result += chunk
            return result
        return json.loads(read(struct.unpack('<I', read(4))[0]))

if __name__ == '__main__':
    import sys
    print(json.dumps(ipc(sys.argv[1], json.loads(sys.argv[2]) if len(sys.argv) > 2 else None), indent=2))