- conn = self.listener.next() => {
- let conn = conn.expect("Listener interrupted");
-
- info!("Client from {} assigned id {next_id}", conn.peer_addr());
-
- let (reader, writer) = conn.split();
- let client = Arc::new(Client {
- id: next_id,
- conn: AsyncMutex::new(writer),
- server: Arc::downgrade(&self.data),
- quit: self.quit.clone(),
- });
-
- self.data
- .clients_by_id
- .write()
- .unwrap()
- .insert(next_id, Arc::clone(&client));
-
- next_id += 1;
-
- task::spawn(async move { (*client).run(reader).await });
- },
+ conn = self.listener.next() => Client::create(
+ conn.expect("listener interrupted"),
+ Arc::downgrade(&self.data),
+ self.quit.clone()
+ ).await,