]>
Commit | Line | Data |
---|---|---|
1772b383 C |
1 | import CliTable3 from 'cli-table3' |
2 | import { ensureDir } from 'fs-extra' | |
3 | import { Client as NetIPC } from 'net-ipc' | |
4 | import { ConfigManager } from '../config-manager' | |
5 | import { IPCReponse, IPCReponseData, IPCRequest } from './shared' | |
6 | ||
7 | export class IPCClient { | |
8 | private netIPC: NetIPC | |
9 | ||
10 | async run () { | |
11 | await ensureDir(ConfigManager.Instance.getSocketDirectory()) | |
12 | ||
13 | const socketPath = ConfigManager.Instance.getSocketPath() | |
0d6a8289 | 14 | |
1772b383 | 15 | this.netIPC = new NetIPC({ path: socketPath }) |
0d6a8289 C |
16 | |
17 | try { | |
18 | await this.netIPC.connect() | |
19 | } catch (err) { | |
20 | if (err.code === 'ECONNREFUSED') { | |
21 | throw new Error( | |
22 | 'This runner is not currently running in server mode on this system. ' + | |
23 | 'Please run it using the `server` command first (in another terminal for example) and then retry your command.' | |
24 | ) | |
25 | } | |
26 | ||
27 | throw err | |
28 | } | |
1772b383 C |
29 | } |
30 | ||
31 | async askRegister (options: { | |
32 | url: string | |
33 | registrationToken: string | |
34 | runnerName: string | |
35 | runnerDescription?: string | |
36 | }) { | |
37 | const req: IPCRequest = { | |
38 | type: 'register', | |
39 | ...options | |
40 | } | |
41 | ||
42 | const { success, error } = await this.netIPC.request(req) as IPCReponse | |
43 | ||
44 | if (success) console.log('PeerTube instance registered') | |
45 | else console.error('Could not register PeerTube instance on runner server side', error) | |
46 | } | |
47 | ||
48 | async askUnregister (options: { | |
49 | url: string | |
f474a519 | 50 | runnerName: string |
1772b383 C |
51 | }) { |
52 | const req: IPCRequest = { | |
53 | type: 'unregister', | |
54 | ...options | |
55 | } | |
56 | ||
57 | const { success, error } = await this.netIPC.request(req) as IPCReponse | |
58 | ||
59 | if (success) console.log('PeerTube instance unregistered') | |
60 | else console.error('Could not unregister PeerTube instance on runner server side', error) | |
61 | } | |
62 | ||
63 | async askListRegistered () { | |
64 | const req: IPCRequest = { | |
65 | type: 'list-registered' | |
66 | } | |
67 | ||
68 | const { success, error, data } = await this.netIPC.request(req) as IPCReponse<IPCReponseData> | |
69 | if (!success) { | |
70 | console.error('Could not list registered PeerTube instances', error) | |
71 | return | |
72 | } | |
73 | ||
74 | const table = new CliTable3({ | |
75 | head: [ 'instance', 'runner name', 'runner description' ] | |
76 | }) | |
77 | ||
78 | for (const server of data.servers) { | |
79 | table.push([ server.url, server.runnerName, server.runnerDescription ]) | |
80 | } | |
81 | ||
82 | console.log(table.toString()) | |
83 | } | |
84 | ||
85 | stop () { | |
86 | this.netIPC.destroy() | |
87 | } | |
88 | } |