58 lines
1.3 KiB
Rust
58 lines
1.3 KiB
Rust
|
use serde::{Serialize, Deserialize};
|
||
|
use serde::de::DeserializeOwned;
|
||
|
use crate::entity::character::CharacterEntityId;
|
||
|
|
||
|
#[derive(Debug, Copy, Clone, Serialize, Deserialize, Hash, PartialEq, Eq)]
|
||
|
pub struct ServerId(pub usize);
|
||
|
#[derive(Debug, Serialize, Deserialize)]
|
||
|
pub struct AuthToken(pub String);
|
||
|
|
||
|
#[derive(Debug, Serialize, Deserialize)]
|
||
|
pub struct Ship {
|
||
|
name: String,
|
||
|
ip: String,
|
||
|
port: u16,
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, Serialize, Deserialize)]
|
||
|
pub enum LoginMessage {
|
||
|
SendMail {
|
||
|
character_id: CharacterEntityId,
|
||
|
title: String,
|
||
|
message: String,
|
||
|
},
|
||
|
ShipList {
|
||
|
ships: Vec<Ship>,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, Serialize, Deserialize)]
|
||
|
pub enum ShipMessage {
|
||
|
Authenticate(AuthToken),
|
||
|
NewShip(Ship),
|
||
|
SendMail {
|
||
|
character_id: CharacterEntityId,
|
||
|
title: String,
|
||
|
message: String,
|
||
|
},
|
||
|
RequestShipList,
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#[async_trait::async_trait]
|
||
|
pub trait InterserverActor {
|
||
|
type SendMessage: Serialize;
|
||
|
type RecvMessage: DeserializeOwned;
|
||
|
type Error;
|
||
|
|
||
|
async fn on_connect(&mut self, id: ServerId) -> Vec<(ServerId, Self::SendMessage)>;
|
||
|
async fn action(&mut self, id: ServerId, msg: Self::RecvMessage) -> Result<Vec<(ServerId, Self::SendMessage)>, Self::Error>;
|
||
|
async fn on_disconnect(&mut self, id: ServerId) -> Vec<(ServerId, Self::SendMessage)>;
|
||
|
}
|