Files
hakorune/tests/development/test_p2p_phase3_delegation.nyash

127 lines
4.4 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 🔥 P2PBox Phase 3: デリゲーション・override革命
// 目標: P2PBoxデリゲーション実装・Everything is Box哲学の完全実証
local console
console = new ConsoleBox()
console.log("🔥 Phase 3: デリゲーション・override革命開始")
// 3.1 P2PBoxデリゲーション - ChatNodeBox実装
console.log("\n📦 3.1 ChatNodeBoxP2PBoxデリゲーション実装")
// Nyashのデリゲーション構文box Child from Parent
box ChatNodeBox from P2PBox {
init { chatHistory, messageCount }
pack(nodeId, transport) {
from P2PBox.pack(nodeId, transport) // 親の初期化
me.chatHistory = new ArrayBox()
me.messageCount = 0
}
// 3.2 send()メソッドのoverride - ログ機能追加
override send(to, intent) {
console = new ConsoleBox()
console.log("📤 [ChatNode] Sending: " + intent.getName() + " to " + to)
// 履歴に記録
local logEntry
logEntry = "SENT:" + intent.getName() + ":" + to
me.chatHistory.push(logEntry)
me.messageCount = me.messageCount + 1
// 親のsend()を呼び出し
return from P2PBox.send(to, intent)
}
// 3.3 getNodeId()のoverride - 拡張情報付き
override getNodeId() {
local baseId
baseId = from P2PBox.getNodeId()
return "[Chat]" + baseId + "(" + me.messageCount + "msgs)"
}
// 3.4 独自メソッド追加
getChatStats() {
return "Messages: " + me.messageCount + ", History: " + me.chatHistory.length()
}
getLastMessage() {
if me.chatHistory.length() > 0 {
return me.chatHistory.get(me.chatHistory.length() - 1)
} else {
return "No messages"
}
}
}
// 3.5 デリゲーション動作テスト
console.log("\n🚀 3.5 ChatNodeBox作成・動作テスト")
local chatAlice
local regularBob
chatAlice = new ChatNodeBox("alice", "inprocess")
regularBob = new P2PBox("bob", "inprocess")
console.log("✅ ChatNodeBox作成完了")
console.log("ChatAlice ID: " + chatAlice.getNodeId()) // override版
console.log("Regular Bob ID: " + regularBob.getNodeId()) // 通常版
// 3.6 override機能テスト
console.log("\n🔄 3.6 Override send()メソッドテスト")
local chatMsg1
local chatMsg2
chatMsg1 = new IntentBox("chat", "Hello from ChatNode!")
chatMsg2 = new IntentBox("info", "System message")
console.log("送信テスト1:")
local result1
result1 = chatAlice.send("bob", chatMsg1) // override版send
console.log("送信結果: " + result1)
console.log("\n送信テスト2:")
local result2
result2 = chatAlice.send("bob", chatMsg2) // override版send
console.log("送信結果: " + result2)
// 3.7 独自メソッドテスト
console.log("\n📊 3.7 ChatNodeBox独自機能テスト")
console.log("Chat統計: " + chatAlice.getChatStats())
console.log("最新メッセージ: " + chatAlice.getLastMessage())
console.log("更新されたID: " + chatAlice.getNodeId()) // カウント更新確認
// 3.8 通常P2PBoxとの比較テスト
console.log("\n⚖ 3.8 ChatNodeBox vs 通常P2PBox比較")
local normalMsg
normalMsg = new IntentBox("normal", "Normal P2P message")
console.log("通常P2PBox送信:")
local normalResult
normalResult = regularBob.send("alice", normalMsg) // 通常版send
console.log("通常送信結果: " + normalResult)
console.log("\nChatNodeBox送信:")
local chatResult
chatResult = chatAlice.send("bob", normalMsg) // override版send
console.log("Chat送信結果: " + chatResult)
// 3.9 Revolution成果確認
console.log("\n🎉 3.9 Everything is Box + デリゲーション革命成果")
console.log("✅ P2PBoxデリゲーション: 成功")
console.log("✅ Override機能: send()・getNodeId()正常動作")
console.log("✅ 独自メソッド: getChatStats()・getLastMessage()追加")
console.log("✅ 親機能継承: isReachable()など全て利用可能")
console.log("✅ ログ機能: 送信履歴記録・カウント機能")
console.log("\n🌟 最終統計:")
console.log("- 送信メッセージ総数: " + chatAlice.getChatStats())
console.log("- ードID拡張表示: " + chatAlice.getNodeId())
console.log("- 最新ログエントリ: " + chatAlice.getLastMessage())
console.log("\n🔥🔥🔥 Phase 3: デリゲーション・override革命完全達成 🔥🔥🔥")
console.log("Everything is Box哲学 + P2P通信 + デリゲーション = 完全統合成功!")