Compare commits

..

4 Commits

Author SHA1 Message Date
Lorenzo Venerandi
a81063b8e1 update deps 2025-01-04 23:58:51 +01:00
Lorenzo Venerandi
8a1dde2b12 task template file 2025-01-04 23:58:45 +01:00
Lorenzo Venerandi
23525a239d Moved messaging handling to main 2025-01-04 23:58:31 +01:00
Lorenzo Venerandi
3bce92358c Delete messaging.go 2025-01-04 23:58:12 +01:00
4 changed files with 56 additions and 46 deletions

View File

@ -48,5 +48,4 @@ RUN mkdir /app
WORKDIR /app
# Install go dependencies, build the wasm module, push it to the registry
#CMD ["sh", "-c", "go mod download && go mod verify && go mod tidy && wash build && wash push $REGISTRY build/*_s.wasm"]
CMD ["sh", "-c", "go env -w GOFLAGS=-buildvcs=false && go mod download && go mod verify && wash build && wash push $REGISTRY build/.wasm"]
CMD ["sh", "-c", "go env -w GOFLAGS=-buildvcs=false && go mod download && go mod verify && wash build && wash push $REGISTRY build/*.wasm"]

43
main.go
View File

@ -2,13 +2,56 @@
package main
import (
logger "gitea.rebus.ninja/lore/wasm-nats-stream-client/gen/wasi/logging/logging"
"gitea.rebus.ninja/lore/wasm-nats-stream-client/gen/wasmcloud/messaging/consumer"
"gitea.rebus.ninja/lore/wasm-nats-stream-client/gen/wasmcloud/messaging/handler"
"gitea.rebus.ninja/lore/wasm-nats-stream-client/gen/wasmcloud/messaging/types"
"github.com/bytecodealliance/wasm-tools-go/cm"
)
type messagingConsumerAdapter struct {
Publish func(msg types.BrokerMessage) (result cm.Result[string, struct{}, string])
}
// NOTE(lxf): this is overridden in tests
var messagingConsumer = &messagingConsumerAdapter{
Publish: consumer.Publish,
}
func init() {
handler.Exports.HandleMessage = handleMessage
}
func handleMessage(msg types.BrokerMessage) cm.Result[string, struct{}, string] {
logger.Log(logger.LevelInfo,"MessageHandler", "Received message on subject" + msg.Subject)
// TODO implement the logic to get the destination topic from the config
// dest_topic := config.GetAll()
dest_topic := "finish"
// TASK
arg := cm.LiftString[string, *uint8, uint8](msg.Body.Data(), uint8(msg.Body.Len()))
result := exec_task(arg)
// Send reply
reply := types.BrokerMessage{
Subject: dest_topic,
Body: cm.ToList([]byte(result)),
ReplyTo: cm.None[string](),
}
res := messagingConsumer.Publish(reply)
if res.IsErr() {
logger.Log(logger.LevelError, "MessageHandler", "Failed to send reply, error: " + *res.Err())
return res
}
return cm.OK[cm.Result[string, struct{}, string]](struct{}{})
}
// Since we don't run this program like a CLI, the `main` function is empty. Instead,
// we call the `handleRequest` function when an HTTP request is received.
func main() {}

View File

@ -1,44 +0,0 @@
package main
import (
"github.com/bytecodealliance/wasm-tools-go/cm"
"gitea.rebus.ninja/lore/wasm-nats-stream-client/gen/wasmcloud/messaging/consumer"
"gitea.rebus.ninja/lore/wasm-nats-stream-client/gen/wasmcloud/messaging/types"
logger "gitea.rebus.ninja/lore/wasm-nats-stream-client/gen/wasi/logging/logging"
//config "gitea.rebus.ninja/lore/go-nats-client/gen/wasi/config/runtime"
)
type messagingConsumerAdapter struct {
Publish func(msg types.BrokerMessage) (result cm.Result[string, struct{}, string])
}
// NOTE(lxf): this is overridden in tests
var messagingConsumer = &messagingConsumerAdapter{
Publish: consumer.Publish,
}
func handleMessage(msg types.BrokerMessage) cm.Result[string, struct{}, string] {
logger.Log(logger.LevelInfo,"MessageHandler", "Received message on subject" + msg.Subject)
// TODO implement the logic to get the destination topic from the config
// dest_topic := config.GetAll()
dest_topic := "finish"
// TASK
// Send reply
reply := types.BrokerMessage{
Subject: dest_topic,
Body: msg.Body,
ReplyTo: cm.None[string](),
}
res := messagingConsumer.Publish(reply)
if res.IsErr() {
logger.Log(logger.LevelError, "MessageHandler", "Failed to send reply, error: " + *res.Err())
return res
}
return cm.OK[cm.Result[string, struct{}, string]](struct{}{})
}

12
task.go Normal file
View File

@ -0,0 +1,12 @@
package main
import (
)
func exec_task(arg string) string{
response := "" + arg
return response
}