Libraryless. Click here for Pure Java version (9702L/66K).
1 | scope startVMLister. |
2 | |
3 | static new TreeMap<Int, startVMLister_Data> startVMLister_vms; |
4 | static Lock startVMLister_lock = lock(); |
5 | static O startVMLister_onChange; |
6 | |
7 | sclass #Data {
|
8 | long started; |
9 | int port; |
10 | S vmID; |
11 | bool hidden; |
12 | } |
13 | |
14 | static bool startVMLister() {
|
15 | S bot = "VM Lister."; |
16 | if (!hasBot(bot)) {
|
17 | makeBot(bot, f startVMLister_answer); |
18 | thread { startVMLister_scan(); }
|
19 | true; |
20 | } |
21 | false; |
22 | } |
23 | |
24 | static S startVMLister_answer(S s) {
|
25 | lock startVMLister_lock; |
26 | |
27 | new Matches m; |
28 | if "started vm * *" {
|
29 | int port = parseInt($1); |
30 | startVMLister_vms.put(port, nu(startVMLister_Data, started := now(), +port, |
31 | vmID := $2)); |
32 | pcallF(startVMLister_onChange); |
33 | ret "OK"; |
34 | } |
35 | |
36 | if "hiding vm *" {
|
37 | startVMLister_Data vm = startVMLister_vms.get(parseInt($1)); |
38 | if (vm != null) vm.hidden = true; |
39 | pcallF(startVMLister_onChange); |
40 | ret "OK"; |
41 | } |
42 | |
43 | if "unhiding vm *" {
|
44 | startVMLister_Data vm = startVMLister_vms.get(parseInt($1)); |
45 | if (vm != null) vm.hidden = false; |
46 | pcallF(startVMLister_onChange); |
47 | ret "OK"; |
48 | } |
49 | |
50 | if "killing vm *" {
|
51 | startVMLister_vms.remove(parseInt($1)); |
52 | pcallF(startVMLister_onChange); |
53 | ret "OK"; |
54 | } |
55 | |
56 | if "number of vms" ret lstr(startVMLister_vms); |
57 | if "number of hidden vms" ret str(startVMLister_numHiddenVMs()); |
58 | if "all vms struct" ret struct(values(startVMLister_vms)); |
59 | |
60 | if "scan vms" {
|
61 | startVMLister_scan(); |
62 | ret "OK, found " + n(startVMLister_vms, "VM"); |
63 | } |
64 | |
65 | null; |
66 | } |
67 | |
68 | svoid startVMLister_scan ctex {
|
69 | lock startVMLister_lock; |
70 | |
71 | new TreeMap<Int, startVMLister_Data> vms; |
72 | |
73 | for (DialogIO io : talkToAllVMs()) try {
|
74 | new startVMLister_Data vm; |
75 | vm.port = io.getPort(); |
76 | vm.vmID = io.ask("get vm id");
|
77 | vm.hidden = isYes(io.ask("is hidden vm"));
|
78 | vm.started = parseLongOpt(io.ask("vm start date"));
|
79 | vms.put(vm.port, vm); |
80 | } finally {
|
81 | io.close(); |
82 | } |
83 | |
84 | copyMap(vms, startVMLister_vms); |
85 | pcallF(startVMLister_onChange); |
86 | } |
87 | |
88 | static int startVMLister_numVMs() {
|
89 | lock startVMLister_lock; |
90 | ret l(startVMLister_vms); |
91 | } |
92 | |
93 | static L<Data> #hiddenVMs() {
|
94 | lock startVMLister_lock; |
95 | ret objectsWhere(values(startVMLister_vms), hidden := true); |
96 | } |
97 | |
98 | static int #numHiddenVMs() {
|
99 | ret l(hiddenVMs()); |
100 | } |
101 | |
102 | end scope |
Began life as a copy of #1009802
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
| Snippet ID: | #1009926 |
| Snippet name: | startVMLister |
| Eternal ID of this version: | #1009926/17 |
| Text MD5: | 606cf45916387748c693e0d814f8daeb |
| Transpilation MD5: | 9dc3099960845a7a52d0b8b174a66cda |
| Author: | stefan |
| Category: | javax / talking robots |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2020-01-29 21:36:54 |
| Source code size: | 2353 bytes / 102 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 751 / 894 |
| Version history: | 16 change(s) |
| Referenced in: | [show references] |