summaryrefslogtreecommitdiff
path: root/Assistant/Threads/PairListener.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Assistant/Threads/PairListener.hs')
-rw-r--r--Assistant/Threads/PairListener.hs12
1 files changed, 9 insertions, 3 deletions
diff --git a/Assistant/Threads/PairListener.hs b/Assistant/Threads/PairListener.hs
index 9ce369032..9875dcb8a 100644
--- a/Assistant/Threads/PairListener.hs
+++ b/Assistant/Threads/PairListener.hs
@@ -17,6 +17,7 @@ import Assistant.DaemonStatus
import Assistant.WebApp
import Assistant.WebApp.Types
import Assistant.Alert
+import Utility.ThreadScheduler
import Network.Multicast
import Network.Socket
@@ -27,12 +28,17 @@ thisThread :: ThreadName
thisThread = "PairListener"
pairListenerThread :: ThreadState -> DaemonStatusHandle -> ScanRemoteMap -> UrlRenderer -> NamedThread
-pairListenerThread st dstatus scanremotes urlrenderer = thread $ withSocketsDo $ do
- sock <- multicastReceiver (multicastAddress $ IPv4Addr undefined) pairingPort
- go sock [] []
+pairListenerThread st dstatus scanremotes urlrenderer = thread $ withSocketsDo $
+ runEvery (Seconds 1) $ void $ tryIO $ do
+ sock <- getsock
+ go sock [] []
where
thread = NamedThread thisThread
+ {- Note this can crash if there's no network interface,
+ - or only one like lo that doesn't support multicast. -}
+ getsock = multicastReceiver (multicastAddress $ IPv4Addr undefined) pairingPort
+
go sock reqs cache = getmsg sock [] >>= \msg -> case readish msg of
Nothing -> go sock reqs cache
Just m -> do