fs_proto.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. use btproto::protocol;
  2. use serde::{Deserialize, Serialize};
  3. use crate::{sector_proto::FileId, ActorName, CallMsg};
  4. #[derive(Serialize, Deserialize)]
  5. pub struct Open {
  6. id: FileId,
  7. }
  8. impl CallMsg for Open {
  9. type Reply = ActorName;
  10. }
  11. protocol! {
  12. let name = FsProtocol;
  13. let states = [
  14. ServerInit, Listening,
  15. Client,
  16. FileInit, Opened,
  17. FileHandle,
  18. ];
  19. ServerInit?Activate -> Listening;
  20. Client -> Client, >service(Listening)!Query;
  21. Listening?Query -> Listening, >Client!Query::Reply;
  22. Client?Query::Reply -> Client;
  23. Client -> Client, >service(Listening)!Open;
  24. Listening?Open -> Listening, FileInit, >Client!Open::Reply[Opened], FileInit!Open;
  25. Client?Open::Reply[Opened] -> Client, FileHandle[Opened];
  26. FileInit?Activate -> FileInit;
  27. FileInit?Open -> Opened;
  28. //PoopedPants?Notification -> Changing;
  29. FileHandle[Opened] -> FileHandle[Opened], >Opened!FileOp;
  30. Opened?FileOp -> Opened, >FileHandle!FileOp::Reply;
  31. FileHandle?FileOp::Reply -> FileHandle;
  32. FileHandle[Opened] -> End, >Opened!Close;
  33. Opened?Close -> End;
  34. }