Guest User

Untitled

a guest
Feb 18th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. use std;
  2. import std::ivec;
  3.  
  4. tag msg {
  5. closed;
  6. received(u8[]);
  7. }
  8.  
  9. fn producer(chan[u8[]] c) {
  10. c <| ~[1u8, 2u8, 3u8, 4u8];
  11. let u8[] empty = ~[];
  12. c <| empty;
  13. }
  14.  
  15. fn packager(chan[chan[u8[]]] cb, chan[msg] msg) {
  16. let port[u8[]] p = port();
  17. cb <| chan(p);
  18. while (true) {
  19. log "waiting for bytes";
  20. let u8[] data;
  21. p |> data;
  22. log "got bytes";
  23. if (ivec::len[u8](data) == 0u) {
  24. log "got empty bytes, quitting";
  25. break;
  26. }
  27. log "sending non-empty buffer of length";
  28. log ivec::len[u8](data);
  29. msg <| received(data);
  30. log "sent non-empty buffer";
  31. }
  32. log "sending closed message";
  33. msg <| closed;
  34. log "sent closed message";
  35. }
  36.  
  37. fn main() {
  38. let port[msg] p = port();
  39. let port[chan[u8[]]] recv_reader = port();
  40. auto pack = spawn packager(chan(recv_reader), chan(p));
  41.  
  42. let chan[u8[]] source_chan;
  43. recv_reader |> source_chan;
  44. let task prod = spawn producer(source_chan);
  45.  
  46. while (true) {
  47. let msg msg;
  48. p |> msg;
  49. alt (msg) {
  50. case (closed) {
  51. log "Got close message";
  52. break;
  53. }
  54. case (received(?data)) {
  55. log "Got data. Length is:";
  56. log ivec::len[u8](data);
  57. }
  58. }
  59. }
  60. }
Add Comment
Please, Sign In to add comment