Guest User

Untitled

a guest
Nov 25th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.82 KB | None | 0 0
  1. let listenWs onMessage port action ct = async {
  2. let address = sprintf "ws://localhost:%i/%s" port action
  3.  
  4. use ws = new ClientWebSocket()
  5.  
  6. //set big buffer, otherwise messages are split
  7. ws.Options.SetBuffer(65535,65535)
  8.  
  9. do! ws.ConnectAsync(System.Uri(address), ct) |> Async.AwaitTask
  10.  
  11. let receivedBytes = ArraySegment(Array.init 10000000 (fun _ -> 0uy))
  12.  
  13. let rec receive messageHead = async {
  14. let! result = ws.ReceiveAsync(receivedBytes, ct) |> Async.AwaitTask
  15. let messagePart = System.Text.Encoding.UTF8.GetString(receivedBytes.Array, 0, result.Count)
  16. let nextMessageHead =
  17. match result.EndOfMessage with
  18. | true ->
  19. let message = messageHead + messagePart
  20. onMessage message
  21. | false -> ""
  22. return! receive nextMessageHead
  23. }
  24.  
  25. return! receive ""
  26. }
Add Comment
Please, Sign In to add comment