add init db data, fix bugs, refactor
This commit is contained in:
@@ -2,6 +2,7 @@ package foundry
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"strconv"
|
||||
@@ -9,6 +10,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
db_model "gitea.local.lab/Lbenedar/foundry_helper_service/internal/foundry/models/db"
|
||||
json_model "gitea.local.lab/Lbenedar/foundry_helper_service/internal/foundry/models/json"
|
||||
"gitea.local.lab/Lbenedar/foundry_helper_service/internal/foundry/requests"
|
||||
"gitea.local.lab/Lbenedar/foundry_helper_service/internal/foundry/types"
|
||||
"github.com/gorilla/websocket"
|
||||
@@ -21,6 +24,33 @@ const (
|
||||
ReaderCode = TransportCode(1)
|
||||
)
|
||||
|
||||
const (
|
||||
RespSessionData = "0"
|
||||
RespPingCode = "2"
|
||||
RespSessionId = "40"
|
||||
RespCreateSessionCode = "42"
|
||||
RespDataCode = "43"
|
||||
|
||||
ReqPongCode = "3"
|
||||
ReqCreateSessionCode = "40"
|
||||
ReqDataCode = "42"
|
||||
)
|
||||
|
||||
var RequestCodes = []string{
|
||||
RespSessionData,
|
||||
RespPingCode,
|
||||
RespSessionId,
|
||||
RespCreateSessionCode,
|
||||
RespDataCode,
|
||||
}
|
||||
|
||||
var CodesRespToReq = map[string]string{
|
||||
RespSessionData: ReqCreateSessionCode,
|
||||
RespPingCode: ReqPongCode,
|
||||
RespCreateSessionCode: ReqDataCode,
|
||||
//ReqDataCode: RespCreateSessionCode,
|
||||
}
|
||||
|
||||
type webSocketUtil struct {
|
||||
wsConn *websocket.Conn
|
||||
currWsId int
|
||||
@@ -30,6 +60,7 @@ type webSocketUtil struct {
|
||||
msgMap map[int](chan []byte)
|
||||
chanMutex sync.Mutex
|
||||
channels types.Channels
|
||||
models db_model.Models
|
||||
}
|
||||
|
||||
func NewWebSocketUtil() *webSocketUtil {
|
||||
@@ -193,6 +224,7 @@ func (ws *webSocketUtil) ServeWebSocket() {
|
||||
}
|
||||
case RespCreateSessionCode:
|
||||
ws.isReadReady = true
|
||||
go ws.GetInitialData()
|
||||
case RespDataCode:
|
||||
ws.msgMap[message.Id] = make(chan []byte, 1)
|
||||
ws.msgMap[message.Id] <- []byte(message.MsgJson)
|
||||
@@ -209,6 +241,56 @@ func (ws *webSocketUtil) IsReadReady() bool {
|
||||
return ws.isReadReady
|
||||
}
|
||||
|
||||
func (ws *webSocketUtil) GetJsonData(stateType string) ([]byte, error) {
|
||||
msg := ws.CreateWSMessageByPage(stateType)
|
||||
|
||||
return ws.HandleWebsocketRequest(msg)
|
||||
}
|
||||
|
||||
func (ws *webSocketUtil) InsertJsonDataToDB(statePath string) error {
|
||||
_, ok1 := requests.PathToSetupState[statePath]
|
||||
_, ok2 := requests.PathToWorldState[statePath]
|
||||
if !ok1 && !ok2 {
|
||||
return ErrorStateTypeNotExist
|
||||
}
|
||||
|
||||
msgJson, err := ws.GetJsonData(statePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
foundryStateJson, err := json_model.ParseSetupModel(msgJson)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
foundryStateDb := foundryStateJson.GetFoundryStateDB(requests.PathToSetupState[statePath])
|
||||
err = ws.models.FoundryState.Insert(foundryStateDb)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ws *webSocketUtil) GetInitialData() {
|
||||
ws.models.FoundryState.DeleteAll()
|
||||
ws.models.FoundryState.DeleteAllSeq()
|
||||
for k := range requests.PathToSetupState {
|
||||
err := ws.InsertJsonDataToDB(k)
|
||||
if err != nil {
|
||||
ws.channels.Err() <- &FoundryError{Type: WriterCode, Err: err}
|
||||
break
|
||||
}
|
||||
}
|
||||
// for k := range requests.PathToWorldState {
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
func (ws *webSocketUtil) CreateNewDataModels(db *sql.DB) {
|
||||
ws.models = db_model.NewModels(db)
|
||||
}
|
||||
|
||||
func (ws *webSocketUtil) CreateWSMessageByPage(page string) *types.WsMessage {
|
||||
msgToSend := &types.WsMessage{Code: CodesRespToReq[RespCreateSessionCode], Id: ws.currWsId, MsgJson: fmt.Sprintf("[\"%s\"]", requests.WsTypeData[page])}
|
||||
ws.currWsId++
|
||||
|
||||
Reference in New Issue
Block a user