Decentralized Peer Search

This commit is contained in:
mr
2026-02-23 17:18:16 +01:00
parent ac700deca5
commit c210522502
5 changed files with 112 additions and 1 deletions

View File

@@ -1,7 +1,10 @@
package controllers
import (
ctx "context"
"encoding/json"
"net/http"
"oc-peer/infrastructure"
oclib "cloud.o-forge.io/core/oc-lib"
"cloud.o-forge.io/core/oc-lib/config"
@@ -9,6 +12,8 @@ import (
"cloud.o-forge.io/core/oc-lib/models/peer"
"cloud.o-forge.io/core/oc-lib/tools"
beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/context"
"golang.org/x/net/websocket"
)
// Operations about workflow
@@ -241,6 +246,46 @@ func (o *PeerController) DeleteState() {
o.ServeJSON()
}
// @Title Search Decentralized
// @Description find workflow by key word
// @Param search path string true "the search you want to get"
// @Param is_draft query string false "draft wished"
// @Success 200 {workflow} models.workflow
// @router /decentralized/search/:search[get]
func (o *PeerController) SearchDecentralized() {
user, _, _ := oclib.ExtractTokenInfo(*o.Ctx.Request)
search := o.Ctx.Input.Param(":search")
b, err := json.Marshal(map[string]string{
"search": search,
})
infrastructure.EmitNATS(user, tools.PropalgationMessage{
Action: tools.PB_SEARCH,
DataType: tools.PEER.EnumIndex(),
Payload: b,
})
if err != nil {
o.Data["json"] = map[string]interface{}{
"data": nil,
"code": 400,
"error": err,
}
o.ServeJSON()
return
}
Websocket(o.Ctx.Request.Context(), user, o.Ctx.ResponseWriter, o.Ctx.Request)
}
func Websocket(ctx ctx.Context, user string, r *context.Response, w *http.Request) {
websocket.Handler(func(ws *websocket.Conn) {
defer ws.Close()
for {
if msg, ok := <-infrastructure.SearchStream[user]; !ok || websocket.Message.Send(ws, msg) != nil {
return
}
}
}).ServeHTTP(r, w)
}
/*
Un pair change le statut d'un autre pair, alors ce dernier est joins automatiquement, on ne peut pas s'auto lié seul un externe peut faire ce processus de demande.
On change le pair pour pouvoir le mettre à jour, alors, le lien se met à jour automatiquement. p1 -> update status -> link (p2) -> p2 response -> update status -> link (p1)