Advertisement
Guest User

Untitled

a guest
Mar 21st, 2014
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.05 KB | None | 0 0
  1. namespace FMBoss.Agent
  2.  
  3. open FMBoss.Data
  4.  
  5. type AgentMessage =
  6.     | UpdateMarket of AsyncReplyChannel<bool>
  7.  
  8. type AgentState =
  9.     { market: Market option }
  10.  
  11. module AgentUtil =
  12.     let emptyState = { market = None }
  13.  
  14. type Agent(server) =
  15.     let client = MapleFmClient()
  16.     let agent = MailboxProcessor.Start(fun inbox ->
  17.         let rec loop state = async {
  18.             let! msg = inbox.Receive()
  19.  
  20.             let state' =
  21.                match msg with
  22.                | UpdateMarket(channel) ->
  23.                    let market =
  24.                        client.FetchMarketAsync(server)
  25.                        |> Async.AwaitTask
  26.                        |> Async.RunSynchronously
  27.                    { state with market = Some(market) }
  28.           return! loop state
  29.       }
  30.       loop AgentUtil.emptyState)
  31.  
  32.   member x.UpdateMarket() = agent.PostAndReply(fun channel -> UpdateMarket(channel))
  33.   member x.UpdateMarketAsync() =
  34.       agent.PostAndAsyncReply(fun channel -> UpdateMarket(channel))
  35.       |> Async.StartAsTask
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement