変な擬似コードでメモ
・起動直後は全ノード firewalled。外部からの接続を検出した段階で firewalled = false に
自ノード←─→B(他o2onノード)
class Key {
string guid;
unsigned long addr;
unsigned short port;
bool firewalled;// デフォルトでfalse
//以下省略
}
自分がキャッシュを保持しているキーは各ノード addr=127.0.0.1, port=自port として保持しておく
Bからキーが入ってきたとき
if (addr == 127.0.0.1) {
addr = B Addr
// port そのまま
firewalled flagもキーに書き込む(Bがfirewalledかどうか)
} else {
そのまま
firewalledはfalseのはず
}
Bにキーを投げるとき
if (addr != B Addr) {
if (firewalled) {
addr = My Addr
port = My Port
} else {
if (転送するか) {
addr = My Addr
port = My Port
}
}
}