package plane import ( "context" "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/tiger1103/gfast/v3/third/plane/globe" ) type Progerss_putter_close_Req struct { g.Meta `path:"progress/putter_close" summary:"推杆闭合进度" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_putter_close(ctx context.Context, req *Progerss_putter_close_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Progress_putter_close_map) } type Progerss_putter_open_Req struct { g.Meta `path:"progress/putter_open" summary:"推杆展开进度" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_putter_open(ctx context.Context, req *Progerss_putter_open_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Progress_putter_open_map) } type Progerss_Reply_Req struct { g.Meta `path:"progress/err_reply" summary:"up回复错误状态" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_Reply(ctx context.Context, req *Progerss_Reply_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Reply) } type Progerss_device_reboot_Req struct { g.Meta `path:"progress/device_reboot" summary:"机库重启进度推送" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_device_reboot(ctx context.Context, req *Progerss_device_reboot_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Progress_device_reboot_map) } type Progerss_cover_close_Req struct { g.Meta `path:"progress/cover_close" summary:"机库关闭舱盖进度推送" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_cover_close(ctx context.Context, req *Progerss_cover_close_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Progress_cover_close_map) } type Progerss_cover_open_Req struct { g.Meta `path:"progress/cover_open" summary:"机库打开舱盖进度推送" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_cover_open(ctx context.Context, req *Progerss_cover_open_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Progress_cover_open_map) } type Progerss_drone_close_Req struct { g.Meta `path:"progress/drone_close" summary:"飞行器关机进度推送" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_drone_close(ctx context.Context, req *Progerss_drone_close_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Progress_drone_close_map) } type Progerss_drone_open_Req struct { g.Meta `path:"progress/drone_open" summary:"飞行器开机进度推送" method:"get" tags:"无人机进度数据相关(ws)"` } func (receiver PLANE) Progerss_drone_open(ctx context.Context, req *Progerss_drone_open_Req) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Progress_drone_open_map) } type DeviceStatusReq struct { g.Meta `path:"device_status" summary:"ws推送飞机状态" method:"get" tags:"无人机进度数据相关(ws)"` } type DeviceStatusRes struct { Code int `json:"code"` Data interface{} `json:"data"` } func (receiver PLANE) DeviceStatus(ctx context.Context, req *DeviceStatusReq) (res *UsualRes, err error) { return save_ws(ctx, &globe.WS_Status_map) } func save_ws(ctx context.Context, _map *globe.WS_MAP) (res *UsualRes, err error) { r := ghttp.RequestFromCtx(ctx) ws, err := r.WebSocket() if err != nil { return nil, err } ip := r.Get("token").String() globe.MutexRw.Lock() (*_map)[ip] = ws globe.MutexRw.Unlock() fmt.Println("ws连接了", ip) for { _, _, err = ws.ReadMessage() if err != nil { fmt.Println("ws断开了", ip) delete(*_map, ip) return nil, err } } }