🚀 feat: P2PBox/IntentBox実装 - NyaMesh通信基盤の第一歩
## 🎯 概要 NyaMeshプロジェクトの基盤となるP2PBox/IntentBoxを実装。 シンプルなsend/onインターフェースで通信ノード間のメッセージングを実現。 ## ✨ 新機能 - **IntentBox**: 通信世界を定義するコンテナ - Transportトレイトで通信方式を抽象化 - LocalTransport実装(プロセス内通信) - 将来のWebSocket/SharedMemory拡張に対応 - **P2PBox**: 通信ノードの実装 - send(intent, data, target) - 特定ノードへ送信 - broadcast(intent, data) - 全ノードへ配信 - on(intent, callback) - リスナー登録 - off(intent) - リスナー解除 - 同一intentに複数リスナー登録可能 ## 🔧 技術詳細 - Arc<Mutex>パターンで完全なスレッドセーフティ - Arc<P2PBoxInner>構造でBox型システムとの整合性確保 - インタープリター完全統合(new/メソッド呼び出し) ## 🧪 テスト - test_p2p_basic.nyash - 基本機能検証 - test_p2p_message_types.nyash - 各種データ型対応 - test_p2p_edge_cases.nyash - エラー処理 - test_p2p_callback_demo.nyash - 実用例 ## 📝 TODO (将来拡張) - WebSocket/SharedMemoryトランスポート - コールバック実行(MethodBox統合待ち) - ノード登録管理システム 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
94
test_p2p_callback_demo.nyash
Normal file
94
test_p2p_callback_demo.nyash
Normal file
@ -0,0 +1,94 @@
|
||||
// 🧪 P2PBox コールバック実行デモ
|
||||
// 実際のメッセージ受信とコールバック実行の様子を確認
|
||||
|
||||
print("=== P2PBox Callback Demo ===")
|
||||
|
||||
// 通信世界を作成
|
||||
local world
|
||||
world = new IntentBox()
|
||||
|
||||
print("\n1. Creating chat nodes...")
|
||||
local alice
|
||||
local bob
|
||||
alice = new P2PBox("alice", world)
|
||||
bob = new P2PBox("bob", world)
|
||||
print("✅ Alice and Bob joined the chat")
|
||||
|
||||
// 現在はコールバックを実際に実行できないため、
|
||||
// 登録と送信の流れを示すデモンストレーション
|
||||
print("\n2. Registering message handlers...")
|
||||
print("⚠️ Note: Callbacks are registered but not executed in current implementation")
|
||||
print(" (MethodBox integration pending)")
|
||||
|
||||
// Bobのメッセージハンドラー登録
|
||||
bob.on("chat", "bob_chat_handler")
|
||||
bob.on("typing", "bob_typing_handler")
|
||||
bob.on("image", "bob_image_handler")
|
||||
print("✅ Bob's handlers registered")
|
||||
|
||||
// Aliceのメッセージハンドラー登録
|
||||
alice.on("chat", "alice_chat_handler")
|
||||
alice.on("reply", "alice_reply_handler")
|
||||
print("✅ Alice's handlers registered")
|
||||
|
||||
print("\n3. Message exchange simulation...")
|
||||
|
||||
// チャットメッセージ
|
||||
local chatMsg
|
||||
chatMsg = new MapBox()
|
||||
chatMsg.set("text", "Hi Bob! How are you?")
|
||||
chatMsg.set("timestamp", 1234567890)
|
||||
alice.send("chat", chatMsg, "bob")
|
||||
print("Alice → Bob: Hi Bob! How are you?")
|
||||
|
||||
// タイピング通知
|
||||
alice.send("typing", true, "bob")
|
||||
print("Alice → Bob: [typing...]")
|
||||
|
||||
// 画像送信
|
||||
local imageMsg
|
||||
imageMsg = new MapBox()
|
||||
imageMsg.set("url", "https://example.com/photo.jpg")
|
||||
imageMsg.set("caption", "Check out this photo!")
|
||||
alice.send("image", imageMsg, "bob")
|
||||
print("Alice → Bob: [sent an image]")
|
||||
|
||||
// 返信
|
||||
local replyMsg
|
||||
replyMsg = new MapBox()
|
||||
replyMsg.set("text", "I'm doing great, thanks!")
|
||||
replyMsg.set("replyTo", "Hi Bob! How are you?")
|
||||
bob.send("reply", replyMsg, "alice")
|
||||
print("Bob → Alice: I'm doing great, thanks!")
|
||||
|
||||
print("\n4. Broadcast demo...")
|
||||
// 全員への通知
|
||||
local announcement
|
||||
announcement = new MapBox()
|
||||
announcement.set("type", "system")
|
||||
announcement.set("message", "Welcome to NyaMesh P2P Chat!")
|
||||
alice.broadcast("announcement", announcement)
|
||||
print("System broadcast: Welcome to NyaMesh P2P Chat!")
|
||||
|
||||
print("\n5. Testing message queue...")
|
||||
// メッセージキューの処理
|
||||
local processed
|
||||
processed = world.processMessages()
|
||||
print("Messages in queue: " + processed)
|
||||
|
||||
print("\n6. Dynamic listener management...")
|
||||
// 動的なリスナー管理
|
||||
alice.off("chat")
|
||||
print("✅ Alice unsubscribed from chat")
|
||||
|
||||
// 解除後のメッセージ(受信されない)
|
||||
bob.send("chat", "Are you still there?", "alice")
|
||||
print("Bob → Alice: Are you still there? (Alice won't receive)")
|
||||
|
||||
print("\n=== Demo Complete ===")
|
||||
print("\n📝 Summary:")
|
||||
print("- IntentBox creates communication worlds")
|
||||
print("- P2PBox nodes can join and exchange messages")
|
||||
print("- Listeners can be dynamically added/removed")
|
||||
print("- LocalTransport handles in-process messaging")
|
||||
print("- Full callback execution requires MethodBox integration")
|
||||
Reference in New Issue
Block a user