You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.7 KiB

  1. use std::net::Ipv4Addr;
  2. use async_std::channel;
  3. use serde::{Serialize, Deserialize};
  4. use serde::de::DeserializeOwned;
  5. use entity::account::UserAccountId;
  6. use entity::character::CharacterEntityId;
  7. #[derive(Debug, Copy, Clone, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord)]
  8. pub struct ServerId(pub usize);
  9. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
  10. pub struct AuthToken(pub String);
  11. #[derive(Debug, Clone, Serialize, Deserialize)]
  12. pub struct Ship {
  13. pub name: String,
  14. pub ip: Ipv4Addr,
  15. pub port: u16,
  16. pub block_count: u32,
  17. }
  18. #[derive(Debug, Serialize, Deserialize)]
  19. pub enum LoginMessage {
  20. SendMail {
  21. character_id: CharacterEntityId,
  22. title: String,
  23. message: String,
  24. },
  25. ShipList {
  26. ships: Vec<Ship>,
  27. },
  28. RequestUsers,
  29. }
  30. #[derive(Debug, Serialize, Deserialize)]
  31. pub enum ShipMessage {
  32. Authenticate(AuthToken),
  33. NewShip(Ship),
  34. SendMail {
  35. character_id: CharacterEntityId,
  36. title: String,
  37. message: String,
  38. },
  39. RequestShipList,
  40. AddUser(UserAccountId),
  41. RemoveUser(UserAccountId),
  42. }
  43. #[async_trait::async_trait]
  44. pub trait InterserverActor: Clone {
  45. type SendMessage: Serialize;
  46. type RecvMessage: DeserializeOwned;
  47. type Error;
  48. async fn on_connect(&mut self, id: ServerId) -> Vec<(ServerId, Self::SendMessage)>;
  49. async fn on_action(&mut self, id: ServerId, msg: Self::RecvMessage) -> Result<Vec<(ServerId, Self::SendMessage)>, Self::Error>;
  50. async fn on_disconnect(&mut self, id: ServerId) -> Vec<(ServerId, Self::SendMessage)>;
  51. async fn set_sender(&mut self, server_id: ServerId, tx: channel::Sender<Self::SendMessage>);
  52. }