added other dsconnect settings
This commit is contained in:
@@ -128,6 +128,8 @@ func (h *Hub) HandleTextMessage(sender *Client, data []byte) {
|
||||
h.handleDeviceGranted(sender, data)
|
||||
case protocol.MsgDeviceDenied:
|
||||
h.handleDeviceDenied(sender, data)
|
||||
case protocol.MsgForceRelease:
|
||||
h.handleForceRelease(sender, data)
|
||||
case protocol.MsgReleaseDevice:
|
||||
h.handleReleaseDevice(sender, data)
|
||||
case protocol.MsgDeviceReleased:
|
||||
@@ -311,6 +313,41 @@ func (h *Hub) handleReleaseDevice(sender *Client, data []byte) {
|
||||
h.mu.RUnlock()
|
||||
}
|
||||
|
||||
// handleForceRelease forwards a force-release request to the target share client
|
||||
func (h *Hub) handleForceRelease(sender *Client, data []byte) {
|
||||
var msg protocol.ForceRelease
|
||||
if err := json.Unmarshal(data, &msg); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Clean up tunnel for this device (by BusID, regardless of who owns it)
|
||||
h.mu.Lock()
|
||||
for tid, tunnel := range h.tunnels {
|
||||
if tunnel.BusID == msg.BusID && tunnel.ShareClient == msg.TargetClient {
|
||||
delete(h.tunnels, tid)
|
||||
log.Printf("[hub] tunnel force-closed: %s", tid)
|
||||
break
|
||||
}
|
||||
}
|
||||
h.mu.Unlock()
|
||||
|
||||
// Forward to share client
|
||||
h.mu.RLock()
|
||||
group := h.groups[sender.Hash]
|
||||
if group != nil {
|
||||
if target := group[msg.TargetClient]; target != nil && target.Mode == protocol.ModeShare {
|
||||
enriched := map[string]interface{}{
|
||||
"type": protocol.MsgForceRelease,
|
||||
"target_client": msg.TargetClient,
|
||||
"bus_id": msg.BusID,
|
||||
"from_client": sender.ID,
|
||||
}
|
||||
target.WriteJSON(enriched)
|
||||
}
|
||||
}
|
||||
h.mu.RUnlock()
|
||||
}
|
||||
|
||||
// handleDeviceReleased broadcasts device released notification
|
||||
func (h *Hub) handleDeviceReleased(sender *Client, data []byte) {
|
||||
h.mu.RLock()
|
||||
|
||||
Reference in New Issue
Block a user