2024-08-28 20:11:00 +01:00
|
|
|
signature UPDATE_THREAD =
|
|
|
|
|
sig
|
|
|
|
|
val run:
|
2024-09-27 08:27:53 +01:00
|
|
|
InputMessage.t Mailbox.mbox
|
2024-08-28 20:11:00 +01:00
|
|
|
* DrawMessage.t Mailbox.mbox
|
2024-08-28 20:42:52 +01:00
|
|
|
* FileMessage.t Mailbox.mbox
|
2024-08-28 20:11:00 +01:00
|
|
|
* AppType.app_type
|
|
|
|
|
-> unit
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
structure UpdateThread :> UPDATE_THREAD =
|
2024-08-28 19:34:47 +01:00
|
|
|
struct
|
|
|
|
|
open CML
|
2024-08-28 20:11:00 +01:00
|
|
|
open UpdateMessage
|
|
|
|
|
|
2024-08-28 20:42:52 +01:00
|
|
|
fun handleMsg (drawMailbox, fileMailbox, updateMsg) =
|
2024-08-28 20:11:00 +01:00
|
|
|
case updateMsg of
|
|
|
|
|
DRAW drawMsg => Mailbox.send (drawMailbox, drawMsg)
|
2024-08-28 20:42:52 +01:00
|
|
|
| FILE fileMsg => Mailbox.send (fileMailbox, fileMsg)
|
2024-09-27 08:27:53 +01:00
|
|
|
|
|
|
|
|
fun handleMsgs (drawMailbox, fileMailbox, lst) =
|
|
|
|
|
case lst of
|
|
|
|
|
hd :: tl =>
|
|
|
|
|
let val _ = handleMsg (drawMailbox, fileMailbox, hd)
|
|
|
|
|
in handleMsgs (drawMailbox, fileMailbox, tl)
|
|
|
|
|
end
|
|
|
|
|
| [] => ()
|
2024-08-28 20:11:00 +01:00
|
|
|
|
2024-08-28 20:42:52 +01:00
|
|
|
fun loop (inputMailbox, drawMailbox, fileMailbox, model) =
|
2024-08-28 20:11:00 +01:00
|
|
|
let
|
|
|
|
|
val inputMsg = Mailbox.recv inputMailbox
|
2024-09-27 08:27:53 +01:00
|
|
|
val (model, updateMsgs) = AppUpdate.update (model, inputMsg)
|
|
|
|
|
val _ = handleMsgs (drawMailbox, fileMailbox, updateMsgs)
|
2024-08-28 20:11:00 +01:00
|
|
|
in
|
2024-08-28 20:42:52 +01:00
|
|
|
loop (inputMailbox, drawMailbox, fileMailbox, model)
|
2024-08-28 20:11:00 +01:00
|
|
|
end
|
2024-08-28 19:34:47 +01:00
|
|
|
|
2024-08-28 20:42:52 +01:00
|
|
|
fun run (inputMailbox, drawMailbox, fileMailbox, initial) =
|
|
|
|
|
loop (inputMailbox, drawMailbox, fileMailbox, initial)
|
2024-08-28 19:34:47 +01:00
|
|
|
end
|