Files
hakorune/test_new_p2p_box.rs

119 lines
4.2 KiB
Rust
Raw Normal View History

/**
* NewP2PBox天才アルゴリズムテスト
*
* 1. Bus経由
* 2. Transport経由
* 3.
*
* MethodBox統合前の基本動作確認
*/
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Duration;
// Nyashモジュールをインポート
use nyash_rust::boxes::{NewP2PBox, MessageIntentBox, StringBox};
use nyash_rust::transport_trait::TransportKind;
use nyash_rust::message_bus::get_global_message_bus;
fn main() {
println!("🚀 NewP2PBox天才アルゴリズムテスト開始");
// テスト1: 基本的なP2PBox作成
test_basic_creation();
// テスト2: ローカル配送Bus経由
test_local_delivery();
// テスト3: イベント購読とコールバック
test_event_subscription();
println!("✅ 全テスト完了!");
}
fn test_basic_creation() {
println!("\n=== テスト1: 基本的なP2PBox作成 ===");
let alice = NewP2PBox::new("alice", TransportKind::InProcess);
let bob = NewP2PBox::new("bob", TransportKind::InProcess);
println!("✅ Alice作成: {}", alice.get_node_id());
println!("✅ Bob作成: {}", bob.get_node_id());
assert_eq!(alice.get_node_id(), "alice");
assert_eq!(bob.get_node_id(), "bob");
}
fn test_local_delivery() {
println!("\n=== テスト2: ローカル配送テスト ===");
let alice = NewP2PBox::new("alice_local", TransportKind::InProcess);
let bob = NewP2PBox::new("bob_local", TransportKind::InProcess);
// メッセージ作成
let mut message = MessageIntentBox::new("greeting");
message.set("text", Box::new(StringBox::new("Hello Bob!")));
message.set("from_user", Box::new(StringBox::new("Alice")));
println!("📨 Aliceからメッセージ送信中...");
// Busが両ードを認識しているかチェック
let bus = get_global_message_bus();
println!("🚌 Alice認識: {}", bus.has_node("alice_local"));
println!("🚌 Bob認識: {}", bus.has_node("bob_local"));
// ローカル配送テスト
match alice.send("bob_local", &message) {
Ok(()) => println!("✅ ローカル配送成功!"),
Err(e) => println!("❌ ローカル配送エラー: {}", e),
}
}
fn test_event_subscription() {
println!("\n=== テスト3: イベント購読テスト ===");
let alice = NewP2PBox::new("alice_events", TransportKind::InProcess);
let bob = NewP2PBox::new("bob_events", TransportKind::InProcess);
// 受信メッセージカウンター
let message_count = Arc::new(Mutex::new(0));
let count_clone = Arc::clone(&message_count);
// Bobにイベントリスナー登録
bob.on("test_message", Box::new(move |intent_box: &MessageIntentBox| {
let mut count = count_clone.lock().unwrap();
*count += 1;
println!("🎧 Bob received message #{}: intent={}", *count, intent_box.intent);
// メッセージ内容確認
if let Some(text_box) = intent_box.get("text") {
if let Some(text) = text_box.as_any().downcast_ref::<StringBox>() {
println!(" 📝 Content: {}", text.value);
}
}
}));
println!("✅ Bobにイベントリスナー登録完了");
// Aliceからメッセージ送信
let mut test_message = MessageIntentBox::new("test_message");
test_message.set("text", Box::new(StringBox::new("Test message from Alice!")));
println!("📤 Aliceからテストメッセージ送信...");
match alice.send("bob_events", &test_message) {
Ok(()) => println!("✅ メッセージ送信成功"),
Err(e) => println!("❌ メッセージ送信エラー: {}", e),
}
// 少し待ってからカウンターチェック
thread::sleep(Duration::from_millis(100));
let final_count = *message_count.lock().unwrap();
println!("📊 最終受信メッセージ数: {}", final_count);
if final_count > 0 {
println!("✅ イベント購読システム動作確認完了!");
} else {
println!("⚠️ メッセージが受信されませんでした(非同期処理の可能性)");
}
}