+ debug: + UserToken: {getCustomCookie("userToken")} +
+ : + + } ); }; diff --git a/src/frontend/src/pages/model/Drone.js b/src/frontend/src/pages/model/Drone.js index 83db1d0..16d4b7d 100644 --- a/src/frontend/src/pages/model/Drone.js +++ b/src/frontend/src/pages/model/Drone.js @@ -15,6 +15,12 @@ class Drone { }, undefined, (error) => { console.error("Ошибка загрузки GLTF:", error); }); + // Создаем красный куб вместо GLB модели + // const geometry = new THREE.BoxGeometry(2, 2, 2); + // const material = new THREE.MeshBasicMaterial({ color: 0xff0000 }); + // const cube = new THREE.Mesh(geometry, material); + // cube.scale.set(scale, scale, scale); + // this.object.add(cube); } setPosition(x, y, z) { diff --git a/src/server/cmd/main.go b/src/server/cmd/main.go index bf35d8a..70ba7d2 100644 --- a/src/server/cmd/main.go +++ b/src/server/cmd/main.go @@ -86,6 +86,7 @@ func main() { if err != nil { panic(err) } + database.Instance = database.NewDbConnection() err = server.SpawnServer() if err != nil { panic(err) diff --git a/src/server/entity/websocket/models.go b/src/server/entity/websocket/models.go index 889f89e..ec53d79 100644 --- a/src/server/entity/websocket/models.go +++ b/src/server/entity/websocket/models.go @@ -1,6 +1,7 @@ package websocket import ( + "fmt" "moxitech/dns/package/math/simulator" "moxitech/dns/package/utils/randomizer" "time" @@ -37,8 +38,15 @@ func (o *Modulation) DeleteObjectIfExists(name string) { } } } -func (o *Modulation) MirrorPayloadToSimulationStruct() { +// MirrorPayloadToSimulationStruct - вернет фулл копию симуляции +func (o *Modulation) MirrorPayloadToSimulationStruct() Modulation { + shadow_sim_copy := Modulation{ + Map: o.Map, + Objects: o.Objects, + Ts_update: o.Ts_update, + } + return shadow_sim_copy } func (o *Modulation) RunSimulator() { @@ -59,22 +67,24 @@ func (o *Modulation) RunSimulator() { // HeightData: heightData, // } // + // ? mapObj := o.Map + // // Определяем дронов // - // drones := []*simulator.Drone{ - // { - // ID: 1, - // Name: "Drone 1", - // Coords: [3]float64{100, 100, 50}, - // Params: simulator.DroneParams{ - // AntennaRadius: 500, - // AntennaDirection: [3]float64{1, 0, 0}, - // Waypoints: [][3]float64{{200, 200, 50}}, - // Speed: 10, - // MeshName: "MeshA", - // }, - // }, - // } + // drones := []*simulator.Drone{ + // { + // ID: 1, + // Name: "Drone 1", + // Coords: [3]float64{100, 100, 50}, + // Params: simulator.DroneParams{ + // AntennaRadius: 500, + // AntennaDirection: [3]float64{1, 0, 0}, + // Waypoints: [][3]float64{{200, 200, 50}}, + // Speed: 10, + // MeshName: "MeshA", + // }, + // }, + // } // // // Определяем базовые станции // @@ -128,6 +138,7 @@ func (o *Modulation) AddObject(name string, obj_type int, coords [3]int, params // Значит объект не станция или не дрон return } + fmt.Println(name, obj_type, coords, params) if o.Objects == nil { o.Objects = make([]*SystemObject, 0) } diff --git a/src/server/internal/database/mongo.go b/src/server/internal/database/mongo.go index 960d12b..dfe5c3d 100644 --- a/src/server/internal/database/mongo.go +++ b/src/server/internal/database/mongo.go @@ -18,12 +18,12 @@ type MongoDbInstance struct { Db *mongo.Database } -var instance *MongoDbInstance +var Instance *MongoDbInstance var once sync.Once // giveMeMongoConnectionString возвращает строку подключения к MongoDB func giveMeMongoConnectionString() string { - return "mongodb://moxitech:moxitech@localhost:27017/" // Замените строку на свою строку подключения + return "mongodb://moxitech:moxitech@mongo:27017/" // Замените строку на свою строку подключения } // NewDbConnection создает подключение к базе данных MongoDB и возвращает единственный экземпляр MongoDbInstance @@ -49,13 +49,13 @@ func NewDbConnection() *MongoDbInstance { log.Println("Успешное подключение к MongoDB") - instance = &MongoDbInstance{ + Instance = &MongoDbInstance{ Client: client, Db: client.Database(os.Getenv("MONGO_INITDB_DATABASE")), } }) - return instance + return Instance } // InsertIntoSimulations вставляет данные в коллекцию "simulations" diff --git a/src/server/internal/server/handlers/authorization/auth_handler.go b/src/server/internal/server/handlers/authorization/auth_handler.go index d6a4ee6..be7b14f 100644 --- a/src/server/internal/server/handlers/authorization/auth_handler.go +++ b/src/server/internal/server/handlers/authorization/auth_handler.go @@ -5,24 +5,42 @@ import ( "moxitech/dns/internal/database" "github.com/gofiber/fiber/v2" + "gorm.io/gorm" ) -// GET localhost:8080/auth/username?/password? +// POST localhost:8080/auth/username?/password? func AuthUser(c *fiber.Ctx) error { username := c.Params("username") password := c.Params("password") if username == "" || password == "" { - return c.Status(501).SendString("username and password has required!") + return c.Status(403).JSON(fiber.Map{ + "error": "username and password are required!", + }) } + user, err := database.DbDriver.GetUserByName(username) + if err == gorm.ErrRecordNotFound { + return c.Status(404).JSON(fiber.Map{ + "error": "User not found", + }) + } if err != nil { - return c.Status(501).SendString(err.Error()) + return c.Status(501).JSON(fiber.Map{ + "error": err.Error(), + }) } if user == nil { - return c.Status(403).SendString(fmt.Sprintf("User with username: %v not found", username)) + return c.Status(403).JSON(fiber.Map{ + "error": fmt.Sprintf("User with username: %v not found", username), + }) } if user.Password != password { - return c.Status(403).SendString("Bad password!") + return c.Status(403).JSON(fiber.Map{ + "error": "Bad password!", + }) } - return c.Status(200).SendString(fmt.Sprintf("Welcome to Drone Network Simulator server-side API! \n UserId: %v ", user.ID)) + + return c.Status(200).JSON(fiber.Map{ + "userid": user.ID, + }) } diff --git a/src/server/internal/server/websocket.go b/src/server/internal/server/websocket.go index b4226e4..fce4708 100644 --- a/src/server/internal/server/websocket.go +++ b/src/server/internal/server/websocket.go @@ -111,6 +111,7 @@ func (room *WebsocketRoom) InsertObject(message websocket.SignalMessage) error { return fmt.Errorf("[insert] error parsing data: %v", err) } + fmt.Println("st 1") // Получаем значения name и params name := parsedData.Name params := parsedData.Params @@ -119,25 +120,31 @@ func (room *WebsocketRoom) InsertObject(message websocket.SignalMessage) error { if params["coords"] == "" { return fmt.Errorf("[insert] coords is empty") } + fmt.Println("st 2") // Разделяем строку координат на отдельные элементы coordinateStrings := strings.Split(params["coords"], ",") // Инициализируем массив для хранения координат coordinates := make([]int, len(coordinateStrings)) + fmt.Println("st 3") // Преобразуем каждую координату в целое число for i, coord := range coordinateStrings { parsedCoord, err := strconv.Atoi(strings.TrimSpace(coord)) if err != nil { + fmt.Println(fmt.Errorf("[insert] invalid coordinate: %s", coord)) return fmt.Errorf("[insert] invalid coordinate: %s", coord) } coordinates[i] = parsedCoord } + fmt.Println("st 4") + params["coords"] = "" // Добавляем объект в комнату roomsMutex.Lock() defer roomsMutex.Unlock() + fmt.Println("st 5") room.Modulation.AddObject(name, type_obj, [3]int{coordinates[0], coordinates[1], coordinates[2]}, params) return nil @@ -199,6 +206,13 @@ func (room *WebsocketRoom) InsertExampleData() { room.Modulation.SpawnExampleData() } +// InsertBasicData вставляет базовые случайные данные в симуляцию +func (room *WebsocketRoom) StoreMongo() { + roomsMutex.Lock() + defer roomsMutex.Unlock() + room.Modulation.MirrorPayloadToSimulationStruct() +} + // InsertMapFromJson вставляет высоты и прочие данные карты в симуляцию, по шаблону func (room *WebsocketRoom) InsertMapFromJson(template string) { // TODO @@ -273,6 +287,8 @@ func (room *WebsocketRoom) WebsocketAction(message []byte) (error, bool) { case 33: // SYNC SIGNAL case 100: + case 101: + // room.StoreMongo(Signal) case 301: