main.go (3052B)
1 package main 2 3 import ( 4 "context" 5 "log" 6 "net" 7 "time" 8 9 "capnproto.org/go/capnp/v3/flowcontrol" 10 "capnproto.org/go/capnp/v3/rpc" 11 "github.com/MTRNord/matrix_protobuf_fed/cmds/client/helpers" 12 protocol "github.com/MTRNord/matrix_protobuf_fed/proto/federation/v1" 13 ) 14 15 // This implements a dummy server for testing purposes of the rough api design especially around signatures 16 17 func main() { 18 log.Println("Connecting to server on port localhost:8449") 19 20 conn, err := net.Dial("tcp", "localhost:8449") 21 if err != nil { 22 log.Fatalln("Failed to connect to server:", err) 23 } 24 defer conn.Close() 25 26 log.Println("Connected to server on port localhost:8449") 27 log.Println("Creating rpc client...") 28 29 rpc_conn := rpc.NewConn(rpc.NewStreamTransport(conn), nil) 30 defer rpc_conn.Close() 31 32 log.Println("Created rpc connection...") 33 34 client := protocol.MatrixFederation(rpc_conn.Bootstrap(context.TODO())) 35 defer client.Release() 36 37 log.Println("Created client...") 38 39 timeoutCtx, cancel := context.WithTimeout(context.TODO(), time.Second*10) 40 defer cancel() 41 err = printServerVersion(timeoutCtx, client) 42 if err != nil { 43 log.Println("Failed to print server version:", err) 44 } 45 46 timeoutCtx, cancel = context.WithTimeout(context.TODO(), time.Second*10) 47 defer cancel() 48 err = printServerKeys(timeoutCtx, client) 49 if err != nil { 50 log.Println("Failed to print server version:", err) 51 } 52 53 timeoutCtx, cancel = context.WithTimeout(context.TODO(), time.Second*10) 54 defer cancel() 55 err = printServerVersion(timeoutCtx, client) 56 if err != nil { 57 log.Println("Failed to print server version:", err) 58 } 59 } 60 61 func printServerKeys(ctx context.Context, client protocol.MatrixFederation) error { 62 callback := helpers.NewKeyStreamCallback() 63 callback_client := protocol.StreamCallback_ServerToClient(callback) 64 defer callback_client.Release() 65 callback_client.SetFlowLimiter(flowcontrol.NewFixedLimiter(1 << 17)) 66 keys_future, release := client.GetKeys(ctx, func(p protocol.MatrixFederation_getKeys_Params) error { 67 log.Println("Sending getKeys request...") 68 69 return p.SetCallback(callback_client) 70 }) 71 defer release() 72 73 log.Println("Sent getKeys request...") 74 _, err := keys_future.Struct() 75 if err != nil { 76 log.Fatalln(err) 77 } 78 79 return nil 80 } 81 82 func printServerVersion(ctx context.Context, client protocol.MatrixFederation) error { 83 version_future, release := client.GetVersion(ctx, func(p protocol.MatrixFederation_getVersion_Params) error { 84 log.Println("Sending getVersion request...") 85 return nil 86 }) 87 defer release() 88 89 log.Println("Sent getVersion request...") 90 91 version_struct, err := version_future.Struct() 92 if err != nil { 93 return err 94 } 95 if !version_struct.HasServerVersion() { 96 log.Fatalln("No server version") 97 } 98 99 server_version, err := version_struct.ServerVersion() 100 if err != nil { 101 return err 102 } 103 104 name, err := server_version.Name() 105 if err != nil { 106 return err 107 } 108 109 version, err := server_version.Version() 110 if err != nil { 111 return err 112 } 113 114 log.Println("Server name:", helpers.QuoteString(name), "version:", helpers.QuoteString(version)) 115 return nil 116 }