150 lines
4.9 KiB
Plaintext
150 lines
4.9 KiB
Plaintext
|
|
// 🔥 P2PBox Phase 3B: ユーザー定義Box間デリゲーション実証
|
|||
|
|
// 目標: ユーザー定義Box同士のデリゲーション・override完全実証
|
|||
|
|
|
|||
|
|
local console
|
|||
|
|
console = new ConsoleBox()
|
|||
|
|
console.log("🔥 Phase 3B: ユーザー定義デリゲーション革命!")
|
|||
|
|
|
|||
|
|
// 3B.1 BaseNodeBox(ユーザー定義)作成
|
|||
|
|
console.log("\n📦 3B.1 BaseNodeBox(ユーザー定義)実装")
|
|||
|
|
|
|||
|
|
box BaseNodeBox {
|
|||
|
|
init { nodeId, messageCount }
|
|||
|
|
|
|||
|
|
pack(id) {
|
|||
|
|
me.nodeId = id
|
|||
|
|
me.messageCount = 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getId() {
|
|||
|
|
return me.nodeId
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sendMessage(target, message) {
|
|||
|
|
me.messageCount = me.messageCount + 1
|
|||
|
|
return "BaseNode sent: " + message + " to " + target
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getMessageCount() {
|
|||
|
|
return me.messageCount
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3B.2 ChatNodeBox(BaseNodeBoxからデリゲーション)
|
|||
|
|
console.log("\n🔄 3B.2 ChatNodeBox(BaseNodeBoxデリゲーション)実装")
|
|||
|
|
|
|||
|
|
box ChatNodeBox from BaseNodeBox {
|
|||
|
|
init { chatHistory, specialFeature }
|
|||
|
|
|
|||
|
|
pack(id, feature) {
|
|||
|
|
from BaseNodeBox.pack(id) // 親の初期化
|
|||
|
|
me.chatHistory = new ArrayBox()
|
|||
|
|
me.specialFeature = feature
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3B.3 sendMessage()のoverride - ログ機能追加
|
|||
|
|
override sendMessage(target, message) {
|
|||
|
|
local logEntry
|
|||
|
|
logEntry = "[CHAT] " + message + " -> " + target
|
|||
|
|
me.chatHistory.push(logEntry)
|
|||
|
|
|
|||
|
|
console = new ConsoleBox()
|
|||
|
|
console.log("📤 ChatNode override: " + logEntry)
|
|||
|
|
|
|||
|
|
// 親のsendMessage()を呼び出し
|
|||
|
|
return from BaseNodeBox.sendMessage(target, message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3B.4 getId()のoverride - 拡張情報付き
|
|||
|
|
override getId() {
|
|||
|
|
local baseId
|
|||
|
|
baseId = from BaseNodeBox.getId()
|
|||
|
|
return "[" + me.specialFeature + "]" + baseId + "(" + me.getMessageCount() + ")"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3B.5 独自メソッド追加
|
|||
|
|
getChatHistory() {
|
|||
|
|
return me.chatHistory.length() + " chat messages logged"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getLastChat() {
|
|||
|
|
if me.chatHistory.length() > 0 {
|
|||
|
|
return me.chatHistory.get(me.chatHistory.length() - 1)
|
|||
|
|
} else {
|
|||
|
|
return "No chats yet"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3B.6 デリゲーション動作テスト
|
|||
|
|
console.log("\n🚀 3B.6 ユーザー定義デリゲーション動作テスト")
|
|||
|
|
|
|||
|
|
local baseNode
|
|||
|
|
local chatNode
|
|||
|
|
|
|||
|
|
baseNode = new BaseNodeBox("base_alice")
|
|||
|
|
chatNode = new ChatNodeBox("chat_bob", "AdvancedChat")
|
|||
|
|
|
|||
|
|
console.log("✅ ノード作成完了")
|
|||
|
|
console.log("BaseNode ID: " + baseNode.getId())
|
|||
|
|
console.log("ChatNode ID: " + chatNode.getId()) // override版
|
|||
|
|
|
|||
|
|
// 3B.7 Override機能テスト
|
|||
|
|
console.log("\n🔄 3B.7 Override sendMessage()テスト")
|
|||
|
|
|
|||
|
|
local result1
|
|||
|
|
local result2
|
|||
|
|
|
|||
|
|
result1 = baseNode.sendMessage("target1", "Hello from base")
|
|||
|
|
console.log("Base送信結果: " + result1)
|
|||
|
|
|
|||
|
|
result2 = chatNode.sendMessage("target2", "Hello from chat") // override版
|
|||
|
|
console.log("Chat送信結果: " + result2)
|
|||
|
|
|
|||
|
|
// 3B.8 複数メッセージテスト
|
|||
|
|
console.log("\n📨 3B.8 複数メッセージ送信テスト")
|
|||
|
|
|
|||
|
|
local result3
|
|||
|
|
local result4
|
|||
|
|
|
|||
|
|
result3 = chatNode.sendMessage("alice", "First chat message")
|
|||
|
|
result4 = chatNode.sendMessage("bob", "Second chat message")
|
|||
|
|
|
|||
|
|
console.log("結果3: " + result3)
|
|||
|
|
console.log("結果4: " + result4)
|
|||
|
|
|
|||
|
|
// 3B.9 独自メソッド・継承メソッドテスト
|
|||
|
|
console.log("\n📊 3B.9 独自メソッド・継承機能テスト")
|
|||
|
|
|
|||
|
|
console.log("Chat履歴: " + chatNode.getChatHistory())
|
|||
|
|
console.log("最新Chat: " + chatNode.getLastChat())
|
|||
|
|
console.log("更新されたID: " + chatNode.getId()) // カウント更新確認
|
|||
|
|
|
|||
|
|
// 継承されたメソッドの動作確認
|
|||
|
|
console.log("継承されたカウント: " + chatNode.getMessageCount())
|
|||
|
|
|
|||
|
|
// 3B.10 ベースノードとの比較
|
|||
|
|
console.log("\n⚖️ 3B.10 BaseNode vs ChatNode比較")
|
|||
|
|
|
|||
|
|
console.log("BaseNode カウント: " + baseNode.getMessageCount())
|
|||
|
|
console.log("ChatNode カウント: " + chatNode.getMessageCount())
|
|||
|
|
|
|||
|
|
console.log("BaseNode ID: " + baseNode.getId())
|
|||
|
|
console.log("ChatNode ID: " + chatNode.getId())
|
|||
|
|
|
|||
|
|
// 3B.11 Revolution成果確認
|
|||
|
|
console.log("\n🎉 3B.11 ユーザー定義デリゲーション革命成果")
|
|||
|
|
|
|||
|
|
console.log("✅ ユーザー定義Boxデリゲーション: 完全成功")
|
|||
|
|
console.log("✅ Override機能: sendMessage()・getId()正常動作")
|
|||
|
|
console.log("✅ 独自メソッド: getChatHistory()・getLastChat()追加")
|
|||
|
|
console.log("✅ 親機能継承: getMessageCount()正常動作")
|
|||
|
|
console.log("✅ from構文: 親メソッド呼び出し成功")
|
|||
|
|
|
|||
|
|
console.log("\n🌟 最終統計:")
|
|||
|
|
console.log("- ChatNode送信数: " + chatNode.getMessageCount())
|
|||
|
|
console.log("- Chat履歴統計: " + chatNode.getChatHistory())
|
|||
|
|
console.log("- 最新Chatログ: " + chatNode.getLastChat())
|
|||
|
|
|
|||
|
|
console.log("\n🔥🔥🔥 Phase 3B: ユーザー定義デリゲーション革命完全達成! 🔥🔥🔥")
|
|||
|
|
console.log("Everything is Box + デリゲーション + Override = 完全動作実証!")
|