package main import ( "fmt" "log" "time" raft_client "igit.com/xbase/raft/client" ) func main() { // 1. Create a new client instance // Ensure your Raft server is running on this address client := raft_client.NewClient("127.0.0.1:9011") // 2. Connect to the server fmt.Println("Connecting to server...") if err := client.Connect(); err != nil { log.Fatalf("Failed to connect: %v", err) } defer client.Close() // 3. Login // Default credentials for the example server username := "root" password := "11111" fmt.Printf("Logging in as %s...\n", username) token, err := client.Login(username, password) if err != nil { log.Printf("Login failed: %v", err) log.Println("Attempting to use SYSTEM_INTERNAL bypass (Development Mode)...") if err := client.Auth("SYSTEM_INTERNAL"); err != nil { log.Fatalf("Bypass failed: %v. Please reset data/node1 or check credentials.", err) } fmt.Println("Bypass successful! using SYSTEM_INTERNAL token.") } else { fmt.Printf("Login successful! Token: %s\n", token) } // 4. Set a value key := "demo_key" value := "Hello Raft Client! " + time.Now().Format(time.RFC3339) fmt.Printf("Setting key '%s' to '%s'...\n", key, value) if err := client.Set(key, value); err != nil { log.Fatalf("Set failed: %v", err) } fmt.Println("Set successful.") // 5. Get the value back fmt.Printf("Getting key '%s'...\n", key) gotVal, err := client.Get(key) if err != nil { log.Fatalf("Get failed: %v", err) } fmt.Printf("Got value: %s\n", gotVal) // 6. Verify if gotVal == value { fmt.Println("Verification successful: Value matches!") } else { fmt.Printf("Verification failed: Expected '%s', got '%s'\n", value, gotVal) } // 7. Async Set Example (High Performance) fmt.Println("\nTesting Async Set (ASET)...") asyncKey := "async_demo_key" asyncVal := "Async Value" if err := client.SetAsync(asyncKey, asyncVal); err != nil { log.Fatalf("Async Set failed: %v", err) } // Wait a tiny bit for replication (since it's async, it might take a ms to be consistent if reading immediately from same node) time.Sleep(10 * time.Millisecond) gotAsyncVal, err := client.Get(asyncKey) if err != nil { log.Fatalf("Get Async Key failed: %v", err) } fmt.Printf("Got async value: %s\n", gotAsyncVal) }