funcexampleSubscribe(session*xconn.Session){subscribeResponse:=session.Subscribe("io.xconn.example",eventHandler).Do()ifsubscribeResponse.Err!=nil{log.Fatalf("Failed to subscribe: %v",subscribeResponse.Err)}log.Printf("Subscribed to topic io.xconn.example")}funceventHandler(evt*xconn.Event){fmt.Printf("Event Received: args=%s, kwargs=%s, details=%s",evt.Args,evt.Kwargs,evt.Details)}
Synchronous
fromxconn.typesimportEventfromxconn.sessionimportSessiondefexample_subscribe(session:Session):session.subscribe("io.xconn.example",event_handler)print("Subscribed to topic 'io.xconn.example'")defevent_handler(event:Event):print(f"Event Received: args={event.args}, kwargs={event.kwargs}, details={event.details}")
Asynchronous
fromxconn.typesimportEventfromxconn.async_sessionimportAsyncSessionasyncdefexample_subscribe(session:AsyncSession):awaitsession.subscribe("io.xconn.example",event_handler)print("Subscribed to topic 'io.xconn.example'")asyncdefevent_handler(event:Event):print(f"Event Received: args={event.args}, kwargs={event.kwargs}, details={event.details}")
voidexampleSubscribe(Sessionsession)async{varsubscription=awaitsession.subscribe("io.xconn.example",eventHandler);print("Subscribed to topic io.xconn.example");}voideventHandler(Eventevent){print("Received Event: args=${event.args}, kwargs=${event.kwargs}, details=${event.details}");}
Publish to a topic
funcexamplePublish(session*xconn.Session){publishResponse:=session.Publish("io.xconn.example").Arg("test").Kwarg("key","value").Do()ifpublishResponse.Err!=nil{log.Fatalf("Failed to publish: %v",publishResponse.Err)}log.Printf("Publsihed to topic io.xconn.example")}
Synchronous
fromxconn.sessionimportSessiondefexample_publish(session:Session):session.publish("io.xconn.example",["test"],{"key":"value"})print("Published to topic io.xconn.example")
Asynchronous
fromxconn.async_sessionimportAsyncSessionasyncdefexample_publish(session:AsyncSession):awaitsession.publish("io.xconn.example",["test"],{"key":"value"})print("Published to topic io.xconn.example")
voidexamplePublish(Sessionsession)async{awaitsession.publish("io.xconn.example",args:["test"],kwargs:{"key":"value"});print("Published to topic io.xconn.example");}
Register a procedure
funcexampleRegister(session*xconn.Session){registerResponse:=session.Register("io.xconn.echo",invocationHandler).Do()ifregisterResponse.Err!=nil{log.Fatalf("Failed to register: %v",registerResponse.Err)}log.Printf("Registered procedure io.xconn.echo")}funcinvocationHandler(ctxcontext.Context,inv*xconn.Invocation)*xconn.InvocationResult{returnxconn.NewInvocationResult()}
session,err:=xconn.ConnectTicket(context.Background(),"ws://localhost:8080/ws","realm1","authid","ticket")iferr!=nil{log.Fatalf("Failed to connect: %v",err)}
session,err:=xconn.ConnectCRA(context.Background(),"ws://localhost:8080/ws","realm1","authid","secret")iferr!=nil{log.Fatalf("Failed to connect: %v",err)}
session,err:=xconn.ConnectCryptosign(context.Background(),"ws://localhost:8080/ws","realm1","authid","d850fff4ff199875c01d3e652e7205309dba2f053ae813c3d277609150adff13")iferr!=nil{log.Fatalf("Failed to connect: %v",err)}
The library supports multiple serializers for data serialization. You can choose the one that best fits your needs. Here are a few examples
JSON Serializer
client:=xconn.Client{SerializerSpec:xconn.JSONSerializerSpec}session,err:=client.Connect(context.Background(),"ws://localhost:8080/ws","realm1")iferr!=nil{log.Fatalf("Failed to connect: %v",err)}
client:=xconn.Client{SerializerSpec:xconn.CBORSerializerSpec}session,err:=client.Connect(context.Background(),"ws://localhost:8080/ws","realm1")iferr!=nil{log.Fatalf("Failed to connect: %v",err)}
client:=xconn.Client{SerializerSpec:xconn.MsgPackSerializerSpec}session,err:=client.Connect(context.Background(),"ws://localhost:8080","realm1")iferr!=nil{log.Fatalf("Failed to connect: %v",err)}
client:=xconn.Client{SerializerSpec:xconn.CapnprotoSplitSerializerSpec}session,err:=client.Connect(context.Background(),"ws://localhost:8080","realm1")iferr!=nil{log.Fatalf("Failed to connect: %v",err)}