make shares of devices
[mTask.git] / Devices / mTaskDevice.icl
index c8bee61..7316f94 100644 (file)
@@ -44,7 +44,8 @@ makeDevice name res = get randomInt @ \rand->{MTaskDevice
                ,deviceTask=Nothing
                ,deviceError=Nothing
                ,deviceData=res
-               ,deviceSpec=Nothing}
+               ,deviceSpec=Nothing
+               ,deviceShares=[]}
 
 getSynFun :: MTaskResource -> ((Shared Channels) -> Task ())
 getSynFun (TCPDevice t) = synFun t
@@ -99,13 +100,14 @@ viewDevice pf d = forever $ traceValue "viewDevice" >>| anyTask
                dropEmpty (r,s,ss) = (filter ((=!=)MTEmpty) r,s,ss)
 
 deleteDevice :: MTaskDevice -> Task ()
-deleteDevice d = upd (\(r,s,ss)->(r,s,True)) (channels d)
+deleteDevice d = sendMessages [MTShutdown] d
+       >>| wait "Waiting for the channels to empty" (\(r,s,ss)->isEmpty s) (channels d)
+       >>| upd (\(r,s,ss)->(r,s,True)) (channels d)
        >>| maybe (treturn ()) (flip removeTask topLevelTasks) d.deviceTask
        >>| upd (filter ((<>)d)) deviceStore
-//     >>| upd (removeShares d) sdsStore
+//     >>| cleanSharesDevice d.deviceName
        @! ()
 
-
 sendMessages :: [MTaskMSGSend] -> (MTaskDevice -> Task Channels)
 sendMessages msgs = upd (\(r,s,ss)->(r,msgs++s,ss)) o channels
 
@@ -127,7 +129,8 @@ deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
 deviceTaskDelete dev task = sendMessages [MTTaskDel task.ident] dev @! ()
 
 deviceTaskDeleteAcked :: MTaskDevice Int -> Task ()
-deviceTaskDeleteAcked d i = withDevices d $ deleteTask
+deviceTaskDeleteAcked d i = cleanSharesTask i d
+       >>| withDevices d deleteTask
        where deleteTask d = {d & deviceTasks=[s\\s<-d.deviceTasks | i <> s.ident]}
 
 deviceAddSpec :: MTaskDevice MTaskDeviceSpec -> Task ()