Artifact
5b6f6b599feb14bfb3cbfeadd28c0403e57ecb67:
0000: 64 69 67 72 61 70 68 20 47 20 7b 0a 0a 20 20 20 digraph G {..
0010: 20 73 75 62 67 72 61 70 68 20 63 6c 75 73 74 65 subgraph cluste
0020: 72 5f 31 20 7b 0a 20 20 20 20 20 20 20 20 6e 6f r_1 {. no
0030: 64 65 20 5b 73 74 79 6c 65 3d 66 69 6c 6c 65 64 de [style=filled
0040: 2c 73 68 61 70 65 3d 62 6f 78 5d 3b 0a 0a 09 63 ,shape=box];...c
0050: 68 65 63 6b 5f 61 76 61 69 6c 61 62 6c 65 5f 71 heck_available_q
0060: 75 65 75 65 20 20 20 20 20 20 20 2d 3e 20 72 65 ueue -> re
0070: 6d 6f 76 65 5f 65 6e 74 72 69 65 73 5f 6f 76 65 move_entries_ove
0080: 72 5f 31 30 73 5f 6f 6c 64 3b 0a 09 72 65 6d 6f r_10s_old;..remo
0090: 76 65 5f 65 6e 74 72 69 65 73 5f 6f 76 65 72 5f ve_entries_over_
00a0: 31 30 73 5f 6f 6c 64 20 2d 3e 20 73 65 74 5f 61 10s_old -> set_a
00b0: 76 61 69 6c 61 62 6c 65 20 5b 6c 61 62 65 6c 3d vailable [label=
00c0: 22 6e 75 6d 5f 61 76 61 69 6c 20 3c 20 33 22 5d "num_avail < 3"]
00d0: 3b 0a 09 72 65 6d 6f 76 65 5f 65 6e 74 72 69 65 ;..remove_entrie
00e0: 73 5f 6f 76 65 72 5f 31 30 73 5f 6f 6c 64 20 2d s_over_10s_old -
00f0: 3e 20 65 78 69 74 20 5b 6c 61 62 65 6c 3d 22 6e > exit [label="n
0100: 75 6d 5f 61 76 61 69 6c 20 3e 20 32 22 5d 3b 0a um_avail > 2"];.
0110: 0a 09 73 65 74 5f 61 76 61 69 6c 61 62 6c 65 20 ..set_available
0120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e ->
0130: 20 64 65 6c 61 79 5f 32 73 3b 0a 09 64 65 6c 61 delay_2s;..dela
0140: 79 5f 32 73 20 20 20 20 20 20 20 20 20 20 2d 3e y_2s ->
0150: 20 63 68 65 63 6b 5f 70 6c 61 63 65 5f 69 6e 5f check_place_in_
0160: 71 75 65 75 65 3b 0a 0a 09 63 68 65 63 6b 5f 70 queue;...check_p
0170: 6c 61 63 65 5f 69 6e 5f 71 75 65 75 65 20 20 20 lace_in_queue
0180: 20 20 20 20 20 2d 3e 20 22 68 74 74 70 3a 74 72 -> "http:tr
0190: 61 6e 73 70 6f 72 74 2d 6c 61 75 6e 63 68 22 20 ansport-launch"
01a0: 5b 6c 61 62 65 6c 3d 22 61 74 20 68 65 61 64 22 [label="at head"
01b0: 5d 3b 0a 09 63 68 65 63 6b 5f 70 6c 61 63 65 5f ];..check_place_
01c0: 69 6e 5f 71 75 65 75 65 20 20 20 20 20 20 20 20 in_queue
01d0: 2d 3e 20 65 78 69 74 20 5b 6c 61 62 65 6c 3d 22 -> exit [label="
01e0: 6e 6f 74 20 61 74 20 68 65 61 64 22 5d 3b 0a 0a not at head"];..
01f0: 09 22 63 6c 69 65 6e 74 3a 6c 6f 67 69 6e 22 20 ."client:login"
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20 ->
0210: 22 73 65 72 76 65 72 3a 73 68 75 74 64 6f 77 6e "server:shutdown
0220: 22 20 5b 6c 61 62 65 6c 3d 22 6c 6f 67 69 6e 20 " [label="login
0230: 66 61 69 6c 65 64 22 5d 3b 0a 09 22 73 65 72 76 failed"];.."serv
0240: 65 72 3a 73 68 75 74 64 6f 77 6e 22 20 20 20 20 er:shutdown"
0250: 20 20 20 20 20 20 20 2d 3e 20 65 78 69 74 3b 09 -> exit;.
0260: 0a 0a 09 73 75 62 67 72 61 70 68 20 63 6c 75 73 ...subgraph clus
0270: 74 65 72 5f 32 20 7b 0a 09 09 22 68 74 74 70 3a ter_2 {..."http:
0280: 74 72 61 6e 73 70 6f 72 74 2d 6c 61 75 6e 63 68 transport-launch
0290: 22 20 20 20 20 20 20 20 2d 3e 20 22 68 74 74 70 " -> "http
02a0: 3a 74 72 61 6e 73 70 6f 72 74 2d 72 75 6e 22 3b :transport-run";
02b0: 0a 09 09 22 68 74 74 70 3a 74 72 61 6e 73 70 6f ..."http:transpo
02c0: 72 74 2d 6c 61 75 6e 63 68 22 20 20 20 20 20 20 rt-launch"
02d0: 20 2d 3e 20 22 68 74 74 70 3a 74 72 61 6e 73 70 -> "http:transp
02e0: 6f 72 74 2d 6b 65 65 70 2d 72 75 6e 6e 69 6e 67 ort-keep-running
02f0: 22 3b 0a 0a 09 09 22 68 74 74 70 3a 74 72 61 6e ";...."http:tran
0300: 73 70 6f 72 74 2d 6b 65 65 70 2d 72 75 6e 6e 69 sport-keep-runni
0310: 6e 67 22 20 2d 3e 20 22 74 65 73 74 73 20 72 75 ng" -> "tests ru
0320: 6e 6e 69 6e 67 3f 22 3b 0a 09 09 22 74 65 73 74 nning?";..."test
0330: 73 20 72 75 6e 6e 69 6e 67 3f 22 20 20 20 20 20 s running?"
0340: 20 20 20 20 20 20 20 20 20 2d 3e 20 22 63 6c 69 -> "cli
0350: 65 6e 74 3a 6c 6f 67 69 6e 22 20 5b 6c 61 62 65 ent:login" [labe
0360: 6c 3d 79 65 73 5d 3b 0a 09 09 22 74 65 73 74 73 l=yes];..."tests
0370: 20 72 75 6e 6e 69 6e 67 3f 22 20 20 20 20 20 20 running?"
0380: 20 20 20 20 20 20 20 20 2d 3e 20 22 73 65 72 76 -> "serv
0390: 65 72 3a 73 68 75 74 64 6f 77 6e 22 20 5b 6c 61 er:shutdown" [la
03a0: 62 65 6c 3d 6e 6f 5d 3b 0a 09 09 22 63 6c 69 65 bel=no];..."clie
03b0: 6e 74 3a 6c 6f 67 69 6e 22 20 20 20 20 20 20 20 nt:login"
03c0: 20 20 20 20 20 20 20 20 20 2d 3e 20 64 65 6c 61 -> dela
03d0: 79 5f 35 73 20 5b 6c 61 62 65 6c 3d 22 6c 6f 67 y_5s [label="log
03e0: 69 6e 20 6f 6b 22 5d 3b 0a 09 09 64 65 6c 61 79 in ok"];...delay
03f0: 5f 35 73 20 20 20 20 20 20 20 20 20 20 20 20 20 _5s
0400: 20 20 20 20 20 20 20 20 20 2d 3e 20 22 68 74 74 -> "htt
0410: 70 3a 74 72 61 6e 73 70 6f 72 74 2d 6b 65 65 70 p:transport-keep
0420: 2d 72 75 6e 6e 69 6e 67 22 3b 0a 09 7d 0a 0a 09 -running";..}...
0430: 2f 2f 20 73 74 61 72 74 5f 73 65 72 76 65 72 20 // start_server
0440: 2d 3e 20 22 73 65 72 76 65 72 5f 72 75 6e 6e 69 -> "server_runni
0450: 6e 67 3f 22 3b 0a 09 2f 2f 20 22 73 65 72 76 65 ng?";..// "serve
0460: 72 5f 72 75 6e 6e 69 6e 67 3f 22 20 2d 3e 20 73 r_running?" -> s
0470: 65 74 5f 61 76 61 69 6c 61 62 6c 65 20 5b 6c 61 et_available [la
0480: 62 65 6c 3d 22 6e 6f 22 5d 3b 0a 09 2f 2f 20 22 bel="no"];..// "
0490: 73 65 72 76 65 72 5f 72 75 6e 6e 69 6e 67 3f 22 server_running?"
04a0: 20 2d 3e 20 64 65 6c 61 79 5f 32 73 20 5b 6c 61 -> delay_2s [la
04b0: 62 65 6c 3d 22 79 65 73 22 5d 3b 0a 09 2f 2f 20 bel="yes"];..//
04c0: 64 65 6c 61 79 5f 32 73 20 2d 3e 20 22 73 74 69 delay_2s -> "sti
04d0: 6c 6c 5f 72 75 6e 6e 69 6e 67 3f 22 3b 0a 09 2f ll_running?";../
04e0: 2f 20 22 73 74 69 6c 6c 5f 72 75 6e 6e 69 6e 67 / "still_running
04f0: 3f 22 20 2d 3e 20 70 69 6e 67 5f 73 65 72 76 65 ?" -> ping_serve
0500: 72 20 5b 6c 61 62 65 6c 3d 79 65 73 5d 3b 0a 09 r [label=yes];..
0510: 2f 2f 20 22 73 74 69 6c 6c 5f 72 75 6e 6e 69 6e // "still_runnin
0520: 67 3f 22 20 2d 3e 20 73 65 74 5f 61 76 61 69 6c g?" -> set_avail
0530: 61 62 6c 65 20 5b 6c 61 62 65 6c 3d 6e 6f 5d 3b able [label=no];
0540: 0a 09 2f 2f 20 70 69 6e 67 5f 73 65 72 76 65 72 ..// ping_server
0550: 20 2d 3e 20 65 78 69 74 20 5b 6c 61 62 65 6c 3d -> exit [label=
0560: 61 6c 69 76 65 5d 3b 0a 09 2f 2f 20 70 69 6e 67 alive];..// ping
0570: 5f 73 65 72 76 65 72 20 2d 3e 20 72 65 6d 6f 76 _server -> remov
0580: 65 5f 73 65 72 76 65 72 5f 72 65 63 6f 72 64 20 e_server_record
0590: 5b 6c 61 62 65 6c 3d 64 65 61 64 5d 3b 0a 09 2f [label=dead];../
05a0: 2f 20 72 65 6d 6f 76 65 5f 73 65 72 76 65 72 5f / remove_server_
05b0: 72 65 63 6f 72 64 20 2d 3e 20 73 65 74 5f 61 76 record -> set_av
05c0: 61 69 6c 61 62 6c 65 3b 0a 09 2f 2f 20 73 65 74 ailable;..// set
05d0: 5f 61 76 61 69 6c 61 62 6c 65 20 2d 3e 20 61 76 _available -> av
05e0: 61 69 6c 5f 64 65 6c 61 79 20 5b 6c 61 62 65 6c ail_delay [label
05f0: 3d 22 64 65 6c 61 79 20 33 73 22 5d 3b 0a 09 2f ="delay 3s"];../
0600: 2f 20 61 76 61 69 6c 5f 64 65 6c 61 79 20 2d 3e / avail_delay ->
0610: 20 22 66 69 72 73 74 5f 69 6e 5f 71 75 65 75 65 "first_in_queue
0620: 3f 22 3b 0a 09 2f 2f 20 0a 09 2f 2f 20 22 66 69 ?";..// ..// "fi
0630: 72 73 74 5f 69 6e 5f 71 75 65 75 65 3f 22 20 2d rst_in_queue?" -
0640: 3e 20 73 65 74 5f 72 75 6e 6e 69 6e 67 20 5b 6c > set_running [l
0650: 61 62 65 6c 3d 79 65 73 5d 3b 0a 09 2f 2f 20 73 abel=yes];..// s
0660: 65 74 5f 72 75 6e 6e 69 6e 67 20 2d 3e 20 67 65 et_running -> ge
0670: 74 5f 6e 65 78 74 5f 70 6f 72 74 20 2d 3e 20 68 t_next_port -> h
0680: 61 6e 64 6c 65 5f 72 65 71 75 65 73 74 73 3b 0a andle_requests;.
0690: 09 2f 2f 20 22 66 69 72 73 74 5f 69 6e 5f 71 75 .// "first_in_qu
06a0: 65 75 65 3f 22 20 2d 3e 20 22 64 65 61 64 5f 65 eue?" -> "dead_e
06b0: 6e 74 72 79 5f 69 6e 5f 71 75 65 75 65 3f 22 20 ntry_in_queue?"
06c0: 5b 6c 61 62 65 6c 3d 6e 6f 5d 3b 0a 09 2f 2f 20 [label=no];..//
06d0: 22 64 65 61 64 5f 65 6e 74 72 79 5f 69 6e 5f 71 "dead_entry_in_q
06e0: 75 65 75 65 3f 22 20 2d 3e 20 22 73 65 72 76 65 ueue?" -> "serve
06f0: 72 5f 72 75 6e 6e 69 6e 67 3f 22 20 5b 6c 61 62 r_running?" [lab
0700: 65 6c 3d 6e 6f 5d 3b 0a 09 2f 2f 20 22 64 65 61 el=no];..// "dea
0710: 64 5f 65 6e 74 72 79 5f 69 6e 5f 71 75 65 75 65 d_entry_in_queue
0720: 3f 22 20 2d 3e 20 22 72 65 6d 6f 76 65 5f 64 65 ?" -> "remove_de
0730: 61 64 5f 65 6e 74 72 69 65 73 22 20 5b 6c 61 62 ad_entries" [lab
0740: 65 6c 3d 79 65 73 5d 3b 0a 09 2f 2f 20 72 65 6d el=yes];..// rem
0750: 6f 76 65 5f 64 65 61 64 5f 65 6e 74 72 69 65 73 ove_dead_entries
0760: 20 2d 3e 20 22 73 65 72 76 65 72 5f 72 75 6e 6e -> "server_runn
0770: 69 6e 67 3f 22 3b 0a 09 2f 2f 20 0a 09 2f 2f 20 ing?";..// ..//
0780: 68 61 6e 64 6c 65 5f 72 65 71 75 65 73 74 73 20 handle_requests
0790: 2d 3e 20 73 74 61 72 74 5f 73 68 75 74 64 6f 77 -> start_shutdow
07a0: 6e 20 5b 6c 61 62 65 6c 3d 22 6e 6f 20 74 72 61 n [label="no tra
07b0: 66 66 69 63 5c 6e 6e 6f 20 72 75 6e 6e 69 6e 67 ffic\nno running
07c0: 20 74 65 73 74 73 22 5d 3b 0a 09 2f 2f 20 68 61 tests"];..// ha
07d0: 6e 64 6c 65 5f 72 65 71 75 65 73 74 73 20 2d 3e ndle_requests ->
07e0: 20 73 68 75 74 64 6f 77 6e 5f 72 65 71 75 65 73 shutdown_reques
07f0: 74 3b 0a 09 2f 2f 20 73 74 61 72 74 5f 73 68 75 t;..// start_shu
0800: 74 64 6f 77 6e 20 2d 3e 20 73 68 75 74 64 6f 77 tdown -> shutdow
0810: 6e 5f 64 65 6c 61 79 3b 0a 09 2f 2f 20 73 68 75 n_delay;..// shu
0820: 74 64 6f 77 6e 5f 72 65 71 75 65 73 74 20 2d 3e tdown_request ->
0830: 20 73 68 75 74 64 6f 77 6e 5f 64 65 6c 61 79 3b shutdown_delay;
0840: 0a 09 2f 2f 20 73 68 75 74 64 6f 77 6e 5f 64 65 ..// shutdown_de
0850: 6c 61 79 20 2d 3e 20 65 78 69 74 3b 0a 09 0a 20 lay -> exit;...
0860: 20 20 20 20 20 20 20 6c 61 62 65 6c 20 3d 20 22 label = "
0870: 73 65 72 76 65 72 3a 6c 61 75 6e 63 68 22 3b 0a server:launch";.
0880: 20 20 20 20 20 20 20 20 63 6f 6c 6f 72 3d 62 72 color=br
0890: 6f 77 6e 3b 0a 20 20 20 20 7d 0a 0a 2f 2f 20 20 own;. }..//
08a0: 20 20 20 63 6c 69 65 6e 74 5f 73 74 61 72 74 5f client_start_
08b0: 73 65 72 76 65 72 20 2d 3e 20 73 74 61 72 74 5f server -> start_
08c0: 73 65 72 76 65 72 3b 0a 2f 2f 20 20 20 20 20 68 server;.// h
08d0: 61 6e 64 6c 65 5f 72 65 71 75 65 73 74 73 20 2d andle_requests -
08e0: 3e 20 72 65 61 64 5f 77 72 69 74 65 3b 0a 2f 2f > read_write;.//
08f0: 20 20 20 20 20 72 65 61 64 5f 77 72 69 74 65 20 read_write
0900: 2d 3e 20 68 61 6e 64 6c 65 5f 72 65 71 75 65 73 -> handle_reques
0910: 74 73 3b 0a 7d 0a ts;.}.