14
|
1 -title: Remote Editor Procotol
|
|
2
|
15
|
3 --EditorとSession Manager の間の非同期Merge
|
|
4
|
|
5 Merge はsesion manager側で行なわれるので、それと同時にeditor
|
|
6 側からの入力がある場合がある。start_merge,end_merge を流す
|
|
7 ので、editorは、それを使って入力をlock(できれば)した方が良い。
|
|
8 editorからの割込みがあった場合は、もう一度やり直す。これは、
|
|
9 local な処理。割り込まれた入力は、そのままsession ringに
|
|
10 流して良い。
|
|
11
|
|
12 <center><img src="reMerge.jpg"></center>
|
|
13
|
|
14 editorからのcommandは、session ringを廻るが、editorには戻らない。
|
|
15 その代わり、start_merge が出る。merge_command は、eid=-2が
|
|
16 ついているので、editorは、これを実行しsession managerに返す
|
|
17 必要がある。(これを見て、割り込みがあったかどうかを判断する)
|
14
|
18
|
|
19 <center><img src="merge-sequence.jpg"></center>
|
|
20
|
|
21 --Sessionのquit
|
|
22
|
15
|
23 まず、quitを廻して、editorからの入力を止める。
|
|
24 既に、入力されたcommandは、quitの前後にいる。
|
|
25
|
14
|
26 <center><img src="terminate1.jpg"></center>
|
15
|
27
|
|
28 quitが一周したら、quit2を流す。quit2を出す時には、
|
|
29 editorが自分が出したcommandが一周するのを確認した
|
|
30 後になる。確認は、session managerが行なう。最初の
|
|
31 editorは、quit2を出した時には終了出来ず、quit2_ack
|
|
32 を待つ必要がある。その他は、quit2を出したら終了
|
|
33 して良い。
|
|
34
|
14
|
35 <center><img src="terminate2.jpg"></center>
|
|
36
|
|
37 closeも同様だが、client editorは単に抜けるだけで良い。
|
|
38 master editorが抜ける時には、quitを行なう。
|
|
39
|
|
40 --Session Manager の切断時の処理
|
|
41
|
15
|
42 切断された時には、gatherを使って、自分がどのsession
|
|
43 を持っているかを判断する必要がある。gatherの後で、
|
|
44 updateを行なう。
|
|
45
|
14
|
46 <center><img src="disconnect.jpg"></center>
|
|
47
|
|
48 --Session Manager の join
|
|
49
|
15
|
50 ループの検出を行なう必要がある。
|
|
51
|
14
|
52 <center><img src="sm_join.jpg"></center>
|
|
53
|
|
54 --Session Manager にまたがるsession
|
|
55
|
|
56 <center><img src="inter-sm-session.jpg"></center>
|
|
57
|
|
58 --Session Manager にまたがる join/put
|
|
59
|
|
60 <center><img src="inter-sm-join.jpg"></center>
|
|
61
|
|
62 --Session Manager にまたがる select
|
|
63
|
|
64 <center><img src="inter-sm-select.jpg"></center>
|