view Merger/remote_editor.ind @ 15:9e761988e372

*** empty log message ***
author kono
date Sun, 19 Oct 2008 22:53:47 +0900
parents 70e4ee7d197d
children fcd3800b4d26
line wrap: on
line source

-title: Remote Editor Procotol

--EditorとSession Manager の間の非同期Merge 

Merge はsesion manager側で行なわれるので、それと同時にeditor
側からの入力がある場合がある。start_merge,end_merge を流す
ので、editorは、それを使って入力をlock(できれば)した方が良い。
editorからの割込みがあった場合は、もう一度やり直す。これは、
local な処理。割り込まれた入力は、そのままsession ringに
流して良い。

<center><img src="reMerge.jpg"></center>

editorからのcommandは、session ringを廻るが、editorには戻らない。
その代わり、start_merge が出る。merge_command は、eid=-2が
ついているので、editorは、これを実行しsession managerに返す
必要がある。(これを見て、割り込みがあったかどうかを判断する)

<center><img src="merge-sequence.jpg"></center>

--Sessionのquit

まず、quitを廻して、editorからの入力を止める。
既に、入力されたcommandは、quitの前後にいる。

<center><img src="terminate1.jpg"></center>

quitが一周したら、quit2を流す。quit2を出す時には、
editorが自分が出したcommandが一周するのを確認した
後になる。確認は、session managerが行なう。最初の
editorは、quit2を出した時には終了出来ず、quit2_ack
を待つ必要がある。その他は、quit2を出したら終了
して良い。

<center><img src="terminate2.jpg"></center>

closeも同様だが、client editorは単に抜けるだけで良い。
master editorが抜ける時には、quitを行なう。

--Session Manager の切断時の処理

切断された時には、gatherを使って、自分がどのsession
を持っているかを判断する必要がある。gatherの後で、
updateを行なう。

<center><img src="disconnect.jpg"></center>

--Session Manager の join

ループの検出を行なう必要がある。

<center><img src="sm_join.jpg"></center>

--Session Manager にまたがるsession

<center><img src="inter-sm-session.jpg"></center>

--Session Manager にまたがる join/put

<center><img src="inter-sm-join.jpg"></center>

--Session Manager にまたがる select

<center><img src="inter-sm-select.jpg"></center>