ps4 needs to find team_id

This commit is contained in:
41666 2023-05-28 14:45:30 -04:00
parent f8add369a6
commit 2a47beb69a

View file

@ -6,7 +6,7 @@ use lazy_static::lazy_static;
use serde::Deserialize; use serde::Deserialize;
use serde_aux::prelude::*; use serde_aux::prelude::*;
use serde_json::json; use serde_json::json;
use sqlx::{postgres::PgPoolOptions, query}; use sqlx::{postgres::PgPoolOptions, query, Row};
use std::{env, net::SocketAddr}; use std::{env, net::SocketAddr};
use tokio::task::JoinSet; use tokio::task::JoinSet;
use tokio_tungstenite::{connect_async, tungstenite::Message}; use tokio_tungstenite::{connect_async, tungstenite::Message};
@ -54,6 +54,7 @@ async fn send_init(tx: futures::channel::mpsc::UnboundedSender<Message>) {
.unwrap(); .unwrap();
println!("[ws] Sent setup message"); println!("[ws] Sent setup message");
println!("[ws/setup] {}", setup_msg.to_string())
} }
#[derive(Clone)] #[derive(Clone)]
@ -85,6 +86,22 @@ struct AnalyticsEvent {
event_name: String, event_name: String,
} }
async fn get_team_id(character_id: String) -> Result<i32, sqlx::Error> {
let pool = PG.get().await;
let team_id: i32 = query("SELECT faction_id FROM players WHERE character_id = $1 LIMIT 1;")
.bind(character_id.clone())
.fetch_one(pool)
.await?
.get(0);
if team_id == 0 {
return Err(sqlx::Error::RowNotFound);
}
Ok(team_id)
}
async fn track_pop(pop_event: PopEvent) { async fn track_pop(pop_event: PopEvent) {
// println!("[ws/track_pop]"); // println!("[ws/track_pop]");
let pool = PG.get().await; let pool = PG.get().await;
@ -335,7 +352,7 @@ struct Event {
attacker_character_id: String, attacker_character_id: String,
#[serde(default, deserialize_with = "deserialize_number_from_string")] #[serde(default, deserialize_with = "deserialize_number_from_string")]
attacker_team_id: i32, attacker_team_id: i32,
#[serde(deserialize_with = "deserialize_number_from_string")] #[serde(default, deserialize_with = "deserialize_number_from_string")]
team_id: i32, team_id: i32,
#[serde(deserialize_with = "deserialize_number_from_string")] #[serde(deserialize_with = "deserialize_number_from_string")]
zone_id: i32, zone_id: i32,
@ -354,8 +371,8 @@ struct Event {
#[serde(default, deserialize_with = "deserialize_number_from_string")] #[serde(default, deserialize_with = "deserialize_number_from_string")]
experience_id: i32, experience_id: i32,
#[serde(default)] // #[serde(default)]
other_id: String, // other_id: String,
} }
#[derive(Deserialize, Debug, Clone)] #[derive(Deserialize, Debug, Clone)]
@ -396,6 +413,8 @@ async fn main() {
} }
let url = url::Url::parse(&addr).unwrap(); let url = url::Url::parse(&addr).unwrap();
println!("[ws] Connecting to {}", url);
let (tx, rx) = futures::channel::mpsc::unbounded(); let (tx, rx) = futures::channel::mpsc::unbounded();
let (ws_stream, _) = connect_async(url).await.expect("Failed to connect"); let (ws_stream, _) = connect_async(url).await.expect("Failed to connect");
let (write, read) = ws_stream.split(); let (write, read) = ws_stream.split();
@ -405,7 +424,7 @@ async fn main() {
.for_each(|msg| async { .for_each(|msg| async {
let body = &msg.unwrap().to_string(); let body = &msg.unwrap().to_string();
let data: Payload = match serde_json::from_str(body) { let mut data: Payload = match serde_json::from_str(body) {
Ok(data) => data, Ok(data) => data,
Err(_) => { Err(_) => {
// println!("Error: {}; body: {}", e, body.clone()); // println!("Error: {}; body: {}", e, body.clone());
@ -423,6 +442,14 @@ async fn main() {
} }
if data.payload.event_name == "GainExperience" { if data.payload.event_name == "GainExperience" {
if data.payload.team_id == 0 {
match get_team_id(data.payload.character_id.clone()).await {
Ok(team_id) => {
data.payload.team_id = team_id;
}
Err(_) => {}
}
}
process_exp_event(&data.payload).await; process_exp_event(&data.payload).await;
return; return;
} }