Skip to content

Commit 1f060b8

Browse files
committed
Fix lint, socket echo
1 parent c970e9c commit 1f060b8

File tree

3 files changed

+38
-11
lines changed

3 files changed

+38
-11
lines changed

apps/labrinth/src/routes/internal/statuses.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,7 @@ pub async fn ws_init(
180180
}
181181

182182
Ok(AggregatedMessage::Ping(msg)) => {
183-
if let Some(mut socket) =
184-
db.auth_sockets.get_mut(&user.id.into())
183+
if let Some(mut socket) = db.auth_sockets.get_mut(&user.id)
185184
{
186185
let (_, socket) = socket.value_mut();
187186
let _ = socket.pong(&msg).await;

packages/app-lib/src/state/friends.rs

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ pub struct FriendsSocket {
2929
#[derive(Deserialize, Serialize)]
3030
pub struct UserFriend {
3131
pub id: String,
32-
// TODO: Remove this optional and serde alias on release
33-
pub friend_id: Option<String>,
34-
#[serde(alias = "pending")]
32+
pub friend_id: String,
3533
pub accepted: bool,
3634
pub created: DateTime<Utc>,
3735
}
@@ -72,6 +70,7 @@ impl FriendsSocket {
7270
}
7371
}
7472

73+
#[tracing::instrument(skip_all)]
7574
pub async fn connect(
7675
&self,
7776
exec: impl sqlx::Executor<'_, Database = sqlx::Sqlite> + Copy,
@@ -144,8 +143,20 @@ impl FriendsSocket {
144143
)
145144
.ok()
146145
}
147-
Message::Ping(_)
148-
| Message::Pong(_)
146+
Message::Ping(bytes) => {
147+
if let Some(write) = write_handle
148+
.write()
149+
.await
150+
.as_mut()
151+
{
152+
let _ = write
153+
.send(Message::Pong(bytes))
154+
.await;
155+
}
156+
157+
continue;
158+
}
159+
Message::Pong(_)
149160
| Message::Frame(_) => continue,
150161
Message::Close(_) => break,
151162
};
@@ -175,8 +186,7 @@ impl FriendsSocket {
175186
}
176187
}
177188
Err(e) => {
178-
println!("WebSocket error: {:?}", e);
179-
break;
189+
tracing::error!("Error handling message from websocket server: {:?}", e);
180190
}
181191
}
182192
}
@@ -198,11 +208,13 @@ impl FriendsSocket {
198208
Ok(())
199209
}
200210

201-
pub async fn reconnect_task() -> crate::Result<()> {
211+
#[tracing::instrument(skip_all)]
212+
pub async fn socket_loop() -> crate::Result<()> {
202213
let state = crate::State::get().await?;
203214

204215
tokio::task::spawn(async move {
205216
let mut last_connection = Utc::now();
217+
let mut last_ping = Utc::now();
206218

207219
loop {
208220
let connected = {
@@ -215,6 +227,7 @@ impl FriendsSocket {
215227
> chrono::Duration::seconds(30)
216228
{
217229
last_connection = Utc::now();
230+
last_ping = Utc::now();
218231
let _ = state
219232
.friends_socket
220233
.connect(
@@ -223,6 +236,15 @@ impl FriendsSocket {
223236
&state.process_manager,
224237
)
225238
.await;
239+
} else if connected
240+
&& Utc::now().signed_duration_since(last_ping)
241+
> chrono::Duration::seconds(10)
242+
{
243+
last_ping = Utc::now();
244+
let mut write = state.friends_socket.write.write().await;
245+
if let Some(write) = write.as_mut() {
246+
let _ = write.send(Message::Ping(Vec::new())).await;
247+
}
226248
}
227249

228250
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
@@ -232,6 +254,7 @@ impl FriendsSocket {
232254
Ok(())
233255
}
234256

257+
#[tracing::instrument(skip(self))]
235258
pub async fn disconnect(&self) -> crate::Result<()> {
236259
let mut write_lock = self.write.write().await;
237260
if let Some(ref mut write_half) = *write_lock {
@@ -241,6 +264,7 @@ impl FriendsSocket {
241264
Ok(())
242265
}
243266

267+
#[tracing::instrument(skip(self))]
244268
pub async fn update_status(
245269
&self,
246270
profile_name: Option<String>,
@@ -257,6 +281,7 @@ impl FriendsSocket {
257281
Ok(())
258282
}
259283

284+
#[tracing::instrument(skip_all)]
260285
pub async fn friends(
261286
exec: impl sqlx::Executor<'_, Database = sqlx::Sqlite> + Copy,
262287
semaphore: &FetchSemaphore,
@@ -272,13 +297,15 @@ impl FriendsSocket {
272297
.await
273298
}
274299

300+
#[tracing::instrument(skip(self))]
275301
pub fn friend_statuses(&self) -> Vec<UserStatus> {
276302
self.user_statuses
277303
.iter()
278304
.map(|x| x.value().clone())
279305
.collect()
280306
}
281307

308+
#[tracing::instrument(skip(exec, semaphore))]
282309
pub async fn add_friend(
283310
user_id: &str,
284311
exec: impl sqlx::Executor<'_, Database = sqlx::Sqlite> + Copy,
@@ -299,6 +326,7 @@ impl FriendsSocket {
299326
Ok(())
300327
}
301328

329+
#[tracing::instrument(skip(exec, semaphore))]
302330
pub async fn remove_friend(
303331
user_id: &str,
304332
exec: impl sqlx::Executor<'_, Database = sqlx::Sqlite> + Copy,

packages/app-lib/src/state/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ impl State {
9696
&state.process_manager,
9797
)
9898
.await;
99-
let _ = FriendsSocket::reconnect_task().await;
99+
let _ = FriendsSocket::socket_loop().await;
100100
});
101101

102102
Ok(())

0 commit comments

Comments
 (0)