|
@@ -24,29 +24,57 @@ func (*OpenNativeRenderRouter) Handle(request ziface.IRequest) {
|
|
|
// 获取roomId
|
|
|
data := request.GetData()
|
|
|
params := strings.Split(string(data), ":")
|
|
|
- if len(params) != 3 {
|
|
|
+ if len(params) != 2 {
|
|
|
zlog.Error("参数不正确")
|
|
|
return
|
|
|
}
|
|
|
- deviceId := params[0]
|
|
|
- roomId := params[1]
|
|
|
- url := params[2]
|
|
|
+ roomId := params[0]
|
|
|
+ url := params[1]
|
|
|
+
|
|
|
+ // !这里没有deviceId native render如何知道自己属于哪个设备?因为此时room中并没有nr.device
|
|
|
+ go openNativeRender(roomId, url, request.GetConnection())
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+type OpenNativeRenderState struct {
|
|
|
+ DeviceId string
|
|
|
+ RoomId int
|
|
|
+ Error string
|
|
|
+}
|
|
|
+
|
|
|
+func openNativeRender(roomId, url string, conn ziface.IConnection) {
|
|
|
+
|
|
|
+ conn.SendMsg(OPEN_NATIVE_RENDER_START, []byte("open native render start"))
|
|
|
// 下载url文件
|
|
|
+ time.Sleep(5 * time.Second)
|
|
|
|
|
|
- // TODO 将roomID 以参数形式传递给blender应用
|
|
|
- // blender中的客户端接收到房间和deviceId后发送创建nativeRender 消息
|
|
|
- // 打开后更新workdevice数据
|
|
|
- pid, err := openRenderFile("blender", []string{
|
|
|
- "-b",
|
|
|
- url,
|
|
|
- "--deviceId",
|
|
|
- deviceId,
|
|
|
- "--roomId",
|
|
|
- roomId,
|
|
|
- })
|
|
|
- fmt.Println(err)
|
|
|
- fmt.Println(pid)
|
|
|
+ restartTiem := 0
|
|
|
|
|
|
+ for {
|
|
|
+ // 打开应用
|
|
|
+ code, err := openRenderFile("./native-render.exe", []string{
|
|
|
+ "--file",
|
|
|
+ url,
|
|
|
+ "--roomId",
|
|
|
+ roomId,
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ // 非正常退出
|
|
|
+ if code != 0 {
|
|
|
+ // 发送消息给服务端提示启动失败
|
|
|
+ conn.SendMsg(OPEN_NATIVE_RENDER_FAIL, []byte(err.Error()))
|
|
|
+ fmt.Println(err)
|
|
|
+ // 重试
|
|
|
+ restartTiem += 1
|
|
|
+ if restartTiem > 3 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是正常退出还是异常退出 0- 正常退出 != 0异常退出
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func openRenderFile(cmdPath string, args []string) (int, error) {
|
|
@@ -55,12 +83,18 @@ func openRenderFile(cmdPath string, args []string) (int, error) {
|
|
|
// 运行命令并捕获输出
|
|
|
err := cmd.Run()
|
|
|
if err != nil {
|
|
|
- fmt.Printf("Blender 启动失败: %v\n", err)
|
|
|
return -1, err
|
|
|
}
|
|
|
|
|
|
- // 获取进程ID
|
|
|
- time.Sleep(3 * time.Second)
|
|
|
- pid := cmd.Process.Pid
|
|
|
- return pid, nil
|
|
|
+ err = cmd.Wait()
|
|
|
+ if err != nil {
|
|
|
+ if exitError, ok := err.(*exec.ExitError); ok {
|
|
|
+ // 获取退出码
|
|
|
+ exitCode := exitError.ExitCode()
|
|
|
+ return exitCode, err
|
|
|
+ }
|
|
|
+ return -1, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0, nil
|
|
|
}
|