added other dsconnect settings

This commit is contained in:
2026-02-19 11:13:14 +01:00
parent 019c60689e
commit 09af99946e
13 changed files with 204 additions and 35 deletions
+37
View File
@@ -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()