feat: update inference reporting and ffmpeg video merge
This commit is contained in:
+54
-14
@@ -132,6 +132,7 @@ type WSClient struct {
|
||||
subscribers map[string]func([]byte)
|
||||
closeChan chan struct{}
|
||||
reconnectFlag bool
|
||||
reconnecting bool
|
||||
}
|
||||
|
||||
// NewWSClient creates WebSocket client
|
||||
@@ -185,7 +186,6 @@ func InitWSChannel() error {
|
||||
}
|
||||
|
||||
isConnecting = true
|
||||
defer func() { isConnecting = false }()
|
||||
|
||||
logger.Logger.Printf("Starting WebSocket connection initialization: %s", wsURL)
|
||||
|
||||
@@ -194,15 +194,21 @@ func InitWSChannel() error {
|
||||
client, err := NewWSClient(wsURL)
|
||||
if err != nil {
|
||||
logger.Logger.Printf("Failed to create WebSocket client: %v", err)
|
||||
wsMutex.Lock()
|
||||
isConnecting = false
|
||||
wsMutex.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
wsMutex.Lock()
|
||||
defer wsMutex.Unlock()
|
||||
if ConfigUpdateChan == nil {
|
||||
ConfigUpdateChan = make(chan DeviceData, 100)
|
||||
}
|
||||
|
||||
// Note: No longer calling LoadDeviceData() here to avoid duplicate loading
|
||||
wsClient = client
|
||||
isConnecting = false
|
||||
logger.Logger.Printf("WebSocket connection initialized successfully (asynchronous)")
|
||||
}()
|
||||
|
||||
@@ -228,7 +234,8 @@ func GetServiceID() string {
|
||||
|
||||
// RegisterService service registration - modified: now requires providing own server_id
|
||||
func RegisterService(containerName string) (string, error) {
|
||||
if wsClient == nil {
|
||||
client := GetWSClient()
|
||||
if client == nil {
|
||||
return "", fmt.Errorf("WebSocket client not initialized")
|
||||
}
|
||||
|
||||
@@ -243,7 +250,7 @@ func RegisterService(containerName string) (string, error) {
|
||||
},
|
||||
}
|
||||
logger.Logger.Printf("Starting service registration: ContainerName=%s, ServiceID=%s", containerName, serviceID)
|
||||
response, err := wsClient.sendRequest("register", params, true)
|
||||
response, err := client.sendRequest("register", params, true)
|
||||
if err != nil {
|
||||
logger.Logger.Printf("Service registration failed: %v", err)
|
||||
return "", err
|
||||
@@ -258,21 +265,24 @@ func RegisterService(containerName string) (string, error) {
|
||||
return "", fmt.Errorf("Service registration failed: Server returned abnormal response")
|
||||
}
|
||||
|
||||
wsClient.serviceID = serviceID
|
||||
client.mutex.Lock()
|
||||
client.serviceID = serviceID
|
||||
client.mutex.Unlock()
|
||||
logger.Logger.Printf("Service registration successful: ServiceID=%s", serviceID)
|
||||
return serviceID, nil
|
||||
}
|
||||
|
||||
// SubscribeTopic topic subscription
|
||||
func SubscribeTopic(topic string, callback func([]byte)) error {
|
||||
if wsClient == nil {
|
||||
client := GetWSClient()
|
||||
if client == nil {
|
||||
return fmt.Errorf("WebSocket client not initialized")
|
||||
}
|
||||
params := SubscribeParams{
|
||||
Topic: topic,
|
||||
}
|
||||
logger.Logger.Printf("Starting topic subscription: Topic=%s", topic)
|
||||
response, err := wsClient.sendRequest("subscribe", params, true)
|
||||
response, err := client.sendRequest("subscribe", params, true)
|
||||
if err != nil {
|
||||
logger.Logger.Printf("Topic subscription failed: %v", err)
|
||||
return err
|
||||
@@ -281,9 +291,9 @@ func SubscribeTopic(topic string, callback func([]byte)) error {
|
||||
logger.Logger.Printf("Topic subscription error: Code=%d, Message=%s", response.Error.Code, response.Error.Message)
|
||||
return fmt.Errorf("Topic subscription error: %s", response.Error.Message)
|
||||
}
|
||||
wsClient.mutex.Lock()
|
||||
wsClient.subscribers[topic] = callback
|
||||
wsClient.mutex.Unlock()
|
||||
client.mutex.Lock()
|
||||
client.subscribers[topic] = callback
|
||||
client.mutex.Unlock()
|
||||
logger.Logger.Printf("Topic subscription successful: Topic=%s", topic)
|
||||
return nil
|
||||
}
|
||||
@@ -344,7 +354,7 @@ func (c *WSClient) sendBinaryFrame(frameType byte, payload []byte) error {
|
||||
if err != nil {
|
||||
logger.Logger.Printf("WebSocket message sending failed: %v", err)
|
||||
c.connected = false
|
||||
go c.reconnect()
|
||||
c.startReconnectLocked()
|
||||
return fmt.Errorf("Message sending failed: %v", err)
|
||||
}
|
||||
return nil
|
||||
@@ -431,7 +441,7 @@ func (c *WSClient) readLoop() {
|
||||
c.mutex.Lock()
|
||||
c.connected = false
|
||||
c.mutex.Unlock()
|
||||
go c.reconnect() // Trigger reconnection
|
||||
c.startReconnect() // Trigger reconnection
|
||||
return
|
||||
}
|
||||
|
||||
@@ -569,7 +579,7 @@ func (c *WSClient) heartbeatLoop() {
|
||||
c.mutex.Lock()
|
||||
c.connected = false
|
||||
c.mutex.Unlock()
|
||||
go c.reconnect()
|
||||
c.startReconnect()
|
||||
} else {
|
||||
logger.Logger.Printf("Ping sent successfully")
|
||||
}
|
||||
@@ -596,7 +606,13 @@ func (c *WSClient) reRegisterAndResubscribe() {
|
||||
logger.Logger.Printf("Re-registration successful: ServiceID=%s", serviceID)
|
||||
|
||||
// 3. 重新订阅
|
||||
c.mutex.Lock()
|
||||
subscribers := make(map[string]func([]byte), len(c.subscribers))
|
||||
for topic, callback := range c.subscribers {
|
||||
subscribers[topic] = callback
|
||||
}
|
||||
c.mutex.Unlock()
|
||||
for topic, callback := range subscribers {
|
||||
if err := SubscribeTopic(topic, callback); err != nil {
|
||||
logger.Logger.Printf("Failed to re-subscribe topic %s: %v", topic, err)
|
||||
} else {
|
||||
@@ -605,9 +621,32 @@ func (c *WSClient) reRegisterAndResubscribe() {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *WSClient) startReconnect() {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
c.startReconnectLocked()
|
||||
}
|
||||
|
||||
func (c *WSClient) startReconnectLocked() {
|
||||
if !c.reconnectFlag || c.reconnecting {
|
||||
return
|
||||
}
|
||||
c.reconnecting = true
|
||||
go c.reconnect()
|
||||
}
|
||||
|
||||
// connect/wschannel.go → reconnect complete fix
|
||||
func (c *WSClient) reconnect() {
|
||||
if !c.reconnectFlag {
|
||||
defer func() {
|
||||
c.mutex.Lock()
|
||||
c.reconnecting = false
|
||||
c.mutex.Unlock()
|
||||
}()
|
||||
|
||||
c.mutex.Lock()
|
||||
reconnectFlag := c.reconnectFlag
|
||||
c.mutex.Unlock()
|
||||
if !reconnectFlag {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -636,12 +675,13 @@ func (c *WSClient) reconnect() {
|
||||
|
||||
// 重启读写循环
|
||||
go c.readLoop()
|
||||
go c.heartbeatLoop()
|
||||
return
|
||||
}
|
||||
|
||||
logger.Logger.Printf("Reconnection failed after 12 attempts")
|
||||
c.mutex.Lock()
|
||||
c.reconnectFlag = false
|
||||
c.mutex.Unlock()
|
||||
}
|
||||
func (d *DeviceData) ToInferenceParams(port int) InferenceParams {
|
||||
return InferenceParams{
|
||||
|
||||
Reference in New Issue
Block a user