Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace FMBoss.Agent
- open FMBoss.Data
- type AgentMessage =
- | UpdateMarket of AsyncReplyChannel<bool>
- type AgentState =
- { market: Market option }
- module AgentUtil =
- let emptyState = { market = None }
- type Agent(server) =
- let client = MapleFmClient()
- let agent = MailboxProcessor.Start(fun inbox ->
- let rec loop state = async {
- let! msg = inbox.Receive()
- let state' =
- match msg with
- | UpdateMarket(channel) ->
- let market =
- client.FetchMarketAsync(server)
- |> Async.AwaitTask
- |> Async.RunSynchronously
- { state with market = Some(market) }
- return! loop state
- }
- loop AgentUtil.emptyState)
- member x.UpdateMarket() = agent.PostAndReply(fun channel -> UpdateMarket(channel))
- member x.UpdateMarketAsync() =
- agent.PostAndAsyncReply(fun channel -> UpdateMarket(channel))
- |> Async.StartAsTask
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement