read loop
This commit is contained in:
+9
-2
@@ -22,9 +22,16 @@ async fn main() {
|
|||||||
async fn ws_handler(ws: WebSocketUpgrade) -> Response {
|
async fn ws_handler(ws: WebSocketUpgrade) -> Response {
|
||||||
ws.on_upgrade(|socket: WebSocket| async {
|
ws.on_upgrade(|socket: WebSocket| async {
|
||||||
match Client::initialize(socket).await {
|
match Client::initialize(socket).await {
|
||||||
Ok(client) => {}
|
Ok(mut client) => {
|
||||||
|
if let Err(e) = client.read_loop().await {
|
||||||
|
eprintln!("Failed to handle client: {e}");
|
||||||
|
} else {
|
||||||
|
println!("Client connection closed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("Failed to initialize client {e}")
|
eprintln!("Failed to initialize client: {e}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+22
-2
@@ -23,8 +23,9 @@ pub enum ClientMethod {
|
|||||||
signature: String,
|
signature: String,
|
||||||
},
|
},
|
||||||
|
|
||||||
#[serde(rename = "error")]
|
Error {
|
||||||
Error { error: Cow<'static, str> },
|
error: Cow<'static, str>,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
@@ -42,6 +43,25 @@ pub enum ServerMethod {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Client {
|
impl Client {
|
||||||
|
pub async fn read_loop(&mut self) -> anyhow::Result<()> {
|
||||||
|
while let Some(message) = self.read().await? {
|
||||||
|
match message {
|
||||||
|
ServerMethod::Initialize { .. } => {
|
||||||
|
self.send(ClientMethod::Error {
|
||||||
|
error: Cow::Borrowed("Already initialized"),
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerMethod::Error { error } => {
|
||||||
|
eprintln!("Client error: {error}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn read_socket(socket: &mut WebSocket) -> anyhow::Result<Option<ServerMethod>> {
|
pub async fn read_socket(socket: &mut WebSocket) -> anyhow::Result<Option<ServerMethod>> {
|
||||||
match socket.recv().await.transpose()? {
|
match socket.recv().await.transpose()? {
|
||||||
Some(Message::Text(text)) => {
|
Some(Message::Text(text)) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user