jasagiri @ ウィキ
WaveProtocol
最終更新:
jasagiri
-
view
公式のConsoleClientを実行して眺めてみる。
./run-server
CertificateManagerImpl <init>
WaveServerImpl <init>
RpcInetSocketAddressFactory <init>
WaveServerImpl <init>
RpcInetSocketAddressFactory <init>
WaveXmppComponent initialize
WaveXmppComponent start
ServerMain run
WaveXmppComponent start
ServerMain run
WaveXmppComponent processPacket
recived XMPP packet:
<iq type="get" id="999-9" from="resultのto" to="resultのfrom">
recived XMPP packet:
<iq type="get" id="999-9" from="resultのto" to="resultのfrom">
<query xmls="http://jabber.org/protocol/disco#info"/>
</iq>
WaveXmppComponent sendPacket
sent XMPP packet:
sent XMPP packet:
<iq type="result" id="999-9" from="recivedのto" to="recivedのfrom">
<query xmlns="http://jabber.org/protocol/disco#info"> <identity category="collaboration" type="google-wave" name="Google Prototype Wave Server - FedOne"/> <feature var="http://waveprotocol.org/protocol/0.2/waveserver"/> </query>
</iq>
./run-client <LoginName1>
ServerRpcProvider$Connection <init>
SocketChannel
SocketChannel
(<LoginName1>)
/new
/new
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
hashed_version { version: 0 history_hash: "wave://<DNSNAME>/<WaveID>/conv+root" } author: "<LoginName1>@<DNSNAME>" operation { add_participant: "<LoginName1>@<DNSNAME>" }
}
signature {
signature {
signature_bytes: "<エンコード文字1>" signer_id: "<エンコード文字2>" signature_algorithm: SHA1_RSA
}
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
delta { hashed_version { version: 0 history_hash: "wave://<DNSNAME>/<WaveID>/conv+root" } author: "<LoginName1>@<DNSNAME>" operation { add_participant: "<LoginName1>@<DNSNAME>" } } signature { signature_bytes: "<エンコード文字1>" signer_id: "<エンコード文字2>" signature_algorithm: SHA1_RSA }
}
hashed_version_applied_at {
hashed_version_applied_at {
version: 0 history_hash: "wave://<DNSNAME>/<WaveID>/conv+root"
}
operations_applied: 1
application_timestamp: <13桁の数字>
operations_applied: 1
application_timestamp: <13桁の数字>
(<LoginName1>)
/open 0
/open 0
(<LoginName1>)
hello
hello
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
hashed_version { version: 1 history_hash: "<何かのエンコード文字>" } author: "<LoginName1>@<DNSNAME>" operation { mutate_document { document_id: "main" document_operation { component { element_start { type: "line" attribute { key: "by" value: "<LoginName1>@<DNSNAME>" } } } component { element_end: true } component { characters: "hello" } } } }
}
signature {
signature {
signature_bytes: "<エンコード文字1>" signer_id: "<エンコード文字2>" signature_algorithm: SHA1_RSA
}
(<LoginName1>)
world
world
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
hashed_version { version: 2 history_hash: "<何かのエンコード文字>" } author: "<LoginName>" operation { mutate_document { document_id: "main" document_operation { component { retain_item_count: 7 } component { element_start { type: "line" attribute { key: "by" value: "<LoginName1>@<DNSNAME>" } } } component { element_end: true } component { characters: "world" } } } }
}
signature {
signature {
signature_bytes: "<エンコード文字3>" signer_id: "<エンコード文字2>" signature_algorithm: SHA1_RSA
}
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
delta { hashed_version { version: 2 history_hash: "<何かしらエンコード文字>" } mutate_document { document_id: "main" document_operation { component { retain_item_count: 7 } component { element_start { type: "line" attribute { key: "by" value: "<LoginName1>@<DNSNAME>" } } } component { element_end: true } component { characters: "world" } } } }
}
signature {
signature {
signature_bytes: "<エンコード文字3>" signer_id: "<エンコード文字2>" signature_algorithm: SHA1_RSA
}
hashed_version_applied_at {
hashed_version_applied_at {
version: 2 history_hash: <ハッシュ文字>
}
operations_applied: 1
application_timestamp: <13桁の数字>
operations_applied: 1
application_timestamp: <13桁の数字>
(<LoginName1>)
isn't this nice?
isn't this nice?
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
hashed_version { version: 3 history_hash: "<何かのエンコード文字>" } author: "<LoginName1>@<DNSNAME>" operation { mutate_document { document_id: "main" document_operation { component { retain_item_count: 14 } component { element_start { type: "line" attribute { key: "by" value: "<LoginName1>@<DNSNAME>" } } } component { element_end: true } component { characters: "isn\'t ths nice?" } } } }
}
signature {
signature {
signature_bytes: "<エンコード文字4>" signer_id: "<エンコード文字>" signature_algorithm: SHA1_RSA
}
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
delta { hashed_version { version: 3 history_hash: "<何かしらエンコード文字>" } mutate_document { document_id: "main" document_operation { component { retain_item_count: 14 } component { element_start { type: "line" attribute { key: "by" value: "<LoginName1>@<DNSNAME>" } } } component { element_end: true } component { characters: "isn\'t ths nice?" } } } }
}
signature {
signature {
signature_bytes: "<エンコード文字3>" signer_id: "<エンコード文字2>" signature_algorithm: SHA1_RSA
}
hashed_version_applied_at {
hashed_version_applied_at {
version: 3 history_hash: <ハッシュ文字>
}
operations_applied: 1
application_timestamp: <13桁の数字>
operations_applied: 1
application_timestamp: <13桁の数字>
./run-client <LoginName2>
ServerRpcProvider$Connection <init>
SocketChannel
SocketChannel
(<LoginName1>)
/add <LoginName2>@<DNSNAME>
/add <LoginName2>@<DNSNAME>
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
hashed_version { version: 4 history_hash: "ハッシュ" } author: "<LoginName1>@<DNSNAME>" operation { add_participant: "<LoginName2>@<DNSNAME>" }
}
signature {
signature {
signature_bytes: "ハッシュ" signer_id: "ハッシュ" signature_algorithm: SHA1_RSA
}
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
delta { hashed_version { version: 4 history_hash: "ハッシュ" } author: "<LoginName1>@<DNSNAME>" operation { add_participant: "<LoginName2>@<DNSNAME>" } } signature { signature_bytes: "ハッシュ" signer_id: "ハッシュ" signature_algorithm: SHA1_RSA }
}
hashed_version_applied_at {
hashed_version_applied_at {
version: 4 history_hash: "ハッシュ"
}
operations_applied: 1
application_timestamo: <13桁の数字>
operations_applied: 1
application_timestamo: <13桁の数字>
(<LoginName2>)
/open 0
/open 0
(<LoginName2>)
thanks for inviting me
thanks for inviting me
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
hashed_version { version: 5 history_hash: "ハッシュ" } author: "<LoginName1>@<DNSNAME>" operation { mutate_document { document_id: "main" document_opearation { component { retain_item_count: 32 } component { element_start { type: "line" attribute { key: "by" value: "<LoginName1>@<DNSNAME>" } } } component { element_end: true } component { characters: "thanks for inviteng me" } } } }
}
signature {
signature {
signature_bytes: "ハッシュ" signer_id: "ハッシュ" signature_algorithm: SHA1_RSA
}
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
delta { hashed_version { version: 5 history_hash: "ハッシュ" } author: "<LoginName1>@<DNSNAME>" operation { mutate_document { document_id: "main" document_operation { component { retain_item_count: 32 } component { element_start { type: "line" attribute { key: "by" value: "<LoginName2>@<DNSNAME>" } } } component { element_end: true } component { characters: "thanks for inviteng me" } } } } signature { signature_bytes: "ハッシュ" signer_id: "ハッシュ" signature_algorithm: SHA1_RSA }
}
hashed_version_applied_at {
hashed_version_applied_at {
version: 5 history_hash: "ハッシュ"
}
operations_applied: 1
application_timestamo: <13桁の数字>
operations_applied: 1
application_timestamo: <13桁の数字>
即時にそれぞれのコンソールに結果が表示される。
クライアントに送ってるところはログに出ないのか...。
クライアントに送ってるところはログに出ないのか...。
(<LoginName2>)
/remove <LoginName1>@<DNSNAME>
/remove <LoginName1>@<DNSNAME>
WaveServerImpl isLocalWavelet
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Got submit: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] delta: delta {
hashed_version { version: 6 history_hash: "ハッシュ" } author "<LoginName2>@<DNSNAME>" operation { remove_participant: "<LoginName1>@<DNSNAME>" }
}
signature {
signature {
signature_bytes: "ハッシュ" signer_id: "ハッシュ" signature_algorithm: SHA1_RSA
}
### WS is local? [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] = true
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
WaveServerImpl submitDelta
### WS: Submit result: [WaveID:<DNSNAME!WaveID>/[WaveletId:<DNSNAME!conv+root>] appliedDelta: signed_original_delta {
delta { hashed_version { version: 6 history_hash: "ハッシュ" } author: "<LoginName2>@<DNSNAME>" operation { remove_paticipant: "<LoginName1>@<DNSNAME>" } } signature { signature_bytes: "ハッシュ" signer_id: "ハッシュ" signature_algorithm: SHA1_RSA }
}
hashed_version_applied_at {
hashed_version_applied_at {
version: 6 history_hash: "ハッシュ"
}
operations_applied: 1
application_timestamo: <13桁の数字>
operations_applied: 1
application_timestamo: <13桁の数字>
相手を強制的に切断できる