|
1
|
|
|
"""Msgpack-rpc subpackage. |
|
2
|
|
|
|
|
3
|
|
|
This package implements a msgpack-rpc client. While it was designed for |
|
4
|
|
|
handling some Nvim particularities(server->client requests for example), the |
|
5
|
|
|
code here should work with other msgpack-rpc servers. |
|
6
|
|
|
""" |
|
7
|
6 |
|
from .async_session import AsyncSession |
|
8
|
6 |
|
from .event_loop import EventLoop |
|
9
|
6 |
|
from .msgpack_stream import MsgpackStream |
|
10
|
6 |
|
from .session import ErrorResponse, Session |
|
11
|
6 |
|
from ..util import get_client_info |
|
12
|
|
|
|
|
13
|
|
|
|
|
14
|
6 |
|
__all__ = ('tcp_session', 'socket_session', 'stdio_session', 'child_session', |
|
15
|
|
|
'ErrorResponse') |
|
16
|
|
|
|
|
17
|
|
|
|
|
18
|
6 |
|
def session(transport_type='stdio', *args, **kwargs): |
|
19
|
6 |
|
loop = EventLoop(transport_type, *args, **kwargs) |
|
20
|
6 |
|
msgpack_stream = MsgpackStream(loop) |
|
21
|
6 |
|
async_session = AsyncSession(msgpack_stream) |
|
22
|
6 |
|
session = Session(async_session) |
|
23
|
6 |
|
session.request(b'nvim_set_client_info', |
|
24
|
|
|
*get_client_info('client', 'remote', {}), async_=True) |
|
25
|
6 |
|
return session |
|
26
|
|
|
|
|
27
|
|
|
|
|
28
|
6 |
|
def tcp_session(address, port=7450): |
|
29
|
|
|
"""Create a msgpack-rpc session from a tcp address/port.""" |
|
30
|
|
|
return session('tcp', address, port) |
|
31
|
|
|
|
|
32
|
|
|
|
|
33
|
6 |
|
def socket_session(path): |
|
34
|
|
|
"""Create a msgpack-rpc session from a unix domain socket.""" |
|
35
|
|
|
return session('socket', path) |
|
36
|
|
|
|
|
37
|
|
|
|
|
38
|
6 |
|
def stdio_session(): |
|
39
|
|
|
"""Create a msgpack-rpc session from stdin/stdout.""" |
|
40
|
|
|
return session('stdio') |
|
41
|
|
|
|
|
42
|
|
|
|
|
43
|
6 |
|
def child_session(argv): |
|
44
|
|
|
"""Create a msgpack-rpc session from a new Nvim instance.""" |
|
45
|
|
|
return session('child', argv) |
|
46
|
|
|
|