From 8cece2431f8a77087e81ff75fbad1c82dafefa41 Mon Sep 17 00:00:00 2001 From: jake Date: Mon, 14 Jun 2021 18:46:02 -0600 Subject: [PATCH 01/13] this isn't a valid thing anymore --- src/entity/gateway/inmemory.rs | 3 ++- src/entity/gateway/postgres/postgres.rs | 3 ++- src/lib.rs | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/entity/gateway/inmemory.rs b/src/entity/gateway/inmemory.rs index cedeaf6..12f9f8f 100644 --- a/src/entity/gateway/inmemory.rs +++ b/src/entity/gateway/inmemory.rs @@ -168,7 +168,8 @@ impl EntityGateway for InMemoryGateway { async fn get_characters_by_user(&self, user: &UserAccountEntity) -> Result<[Option; 4], GatewayError> { let characters = self.characters.lock().unwrap(); - let mut chars = [None; 4]; + const NONE: Option = None; + let mut chars = [NONE; 4]; characters .iter() .filter(|(_, c)| c.user_id == user.id) diff --git a/src/entity/gateway/postgres/postgres.rs b/src/entity/gateway/postgres/postgres.rs index 45aee91..4d7a36e 100644 --- a/src/entity/gateway/postgres/postgres.rs +++ b/src/entity/gateway/postgres/postgres.rs @@ -229,7 +229,8 @@ impl EntityGateway for PostgresGateway { let mut stream = sqlx::query_as::<_, PgCharacter>("select * from player_character where user_account = $1 and slot < 4 order by slot") .bind(user.id.0) .fetch(&self.pool); - let mut result = [None; 4]; + const NONE: Option = None; + let mut result = [NONE; 4]; while let Some(character) = stream.try_next().await? { let index = character.slot as usize; result[index] = Some(character.into()) diff --git a/src/lib.rs b/src/lib.rs index abd1d14..0927759 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ #![allow(incomplete_features)] #![feature(const_generics)] #![feature(maybe_uninit_extra)] -#![feature(const_in_array_repeat_expressions)] +#![feature(inline_const)] #![feature(drain_filter)] #![feature(or_patterns)] -- 2.36.0 From f9be2596cfbf673c5ce16d31a6f3a450f9f709be Mon Sep 17 00:00:00 2001 From: jake Date: Tue, 15 Jun 2021 20:43:07 -0600 Subject: [PATCH 02/13] missed this const fix --- src/ship/ship.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ship/ship.rs b/src/ship/ship.rs index f8f08a6..b986648 100644 --- a/src/ship/ship.rs +++ b/src/ship/ship.rs @@ -390,9 +390,11 @@ pub struct Block { impl Default for Block { fn default() -> Block { + const SNONE: Option = None; + const NONE: Rooms = [SNONE; MAX_ROOMS]; Block { client_location: Box::new(ClientLocation::default()), - rooms: Box::new([None; MAX_ROOMS]), + rooms: Box::new(NONE), } } } -- 2.36.0 From a3f2cd8586d62b1c2c968d062397b2197a6e8655 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 16 Jun 2021 02:16:52 -0600 Subject: [PATCH 03/13] specify nightly version --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index a7bb401..e2c1ec5 100644 --- a/README.md +++ b/README.md @@ -13,5 +13,11 @@ libpso = { path = "path/to/libpso" } ``` at the end of the `Cargo.toml` file +# rust nightly version +``` +rustup override set nightly-2021-03-15 +``` + + # to actually run it * `cargo run` -- 2.36.0 From b812e4116877c8f7244c47b97b7914709ac14843 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 16 Jun 2021 02:17:18 -0600 Subject: [PATCH 04/13] this feature made its way in --- src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 0927759..531b38c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,6 @@ #![feature(maybe_uninit_extra)] #![feature(inline_const)] #![feature(drain_filter)] -#![feature(or_patterns)] -- 2.36.0 From 45f0cc35ddf9c65e983e7d86a507073dbafbc528 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 16 Jun 2021 20:09:19 -0600 Subject: [PATCH 05/13] clean this up a bit --- src/common/mainloop/interserver.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/common/mainloop/interserver.rs b/src/common/mainloop/interserver.rs index 7e4b95d..8d25bd2 100644 --- a/src/common/mainloop/interserver.rs +++ b/src/common/mainloop/interserver.rs @@ -156,16 +156,16 @@ where match output_loop_receiver.recv().await { Ok(msg) => { let payload = serde_json::to_string(&msg); - if let Ok(payload) = payload { - let len_bytes = u32::to_le_bytes(payload.len() as u32); + if let Ok(payload2) = payload { + let len_bytes = u32::to_le_bytes(payload2.len() as u32); - match socket.write_all(&len_bytes).await { - Ok(_) => {}, - Err(err) => warn!("send failed: {:?}", err), + if let Err(err) = socket.write_all(&len_bytes).await { + warn!("interserver send failed: {:?}", err); + break; } - match socket.write_all(&payload.as_bytes()).await { - Ok(_) => {}, - Err(err) => warn!("send failed: {:?}", err), + if let Err(err) = socket.write_all(&payload2.as_bytes()).await { + warn!("intserserver send failed: {:?}", err); + break; } } }, -- 2.36.0 From de42ac4f9fcaabbb8a7e23b645c00671092f17fc Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 16 Jun 2021 20:09:34 -0600 Subject: [PATCH 06/13] disambiguate? --- src/entity/gateway/postgres/models.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entity/gateway/postgres/models.rs b/src/entity/gateway/postgres/models.rs index 892fa24..d6a0c14 100644 --- a/src/entity/gateway/postgres/models.rs +++ b/src/entity/gateway/postgres/models.rs @@ -759,7 +759,7 @@ impl Into for PgEquipped { impl From<(CharacterEntityId, EquippedEntity)> for PgEquipped { fn from(char_equips: (CharacterEntityId, EquippedEntity)) -> PgEquipped { PgEquipped { - pchar: char_equips.0.0 as i32, + pchar: (char_equips.0).0 as i32, weapon: char_equips.1.weapon.map(|i| i.0 as i32), armor: char_equips.1.armor.map(|i| i.0 as i32), shield: char_equips.1.shield.map(|i| i.0 as i32), -- 2.36.0 From f38c791794a351bd736c2022469207bd3aaeccf9 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 16 Jun 2021 21:40:20 -0600 Subject: [PATCH 07/13] set serde version --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d9c1bff..d4c6dd5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,8 +13,8 @@ rand_chacha = "0.2.2" crc = "^1.0.0" bcrypt = "0.4" chrono = "0.4.11" -serde = "*" -serde_json = "*" +serde = "1.0.117" +serde_json = "1.0.117" ron = "*" toml = "*" log = "*" -- 2.36.0 From a3176380d92f464c0fb4858f0c4129bcd5f01b0f Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 16 Jun 2021 23:14:38 -0600 Subject: [PATCH 08/13] didn't need to set that one --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index d4c6dd5..55bc53d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ crc = "^1.0.0" bcrypt = "0.4" chrono = "0.4.11" serde = "1.0.117" -serde_json = "1.0.117" +serde_json = "*" ron = "*" toml = "*" log = "*" -- 2.36.0 From 675d9719a94617cdafbcbe00c5906798a7def121 Mon Sep 17 00:00:00 2001 From: jake Date: Thu, 17 Jun 2021 00:21:13 -0600 Subject: [PATCH 09/13] try this version instead --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 55bc53d..b71473f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ rand_chacha = "0.2.2" crc = "^1.0.0" bcrypt = "0.4" chrono = "0.4.11" -serde = "1.0.117" +serde = "*" serde_json = "*" ron = "*" toml = "*" @@ -27,7 +27,7 @@ ages-prs = "0.1" async-trait = "0.1.41" lazy_static = "1.4.0" barrel = { version = "0.6.5", features = ["pg"] } -refinery = { version = "0.3.0", features = ["postgres"] } +refinery = { version = "0.4.0", features = ["postgres"] } sqlx = { version = "0.4.0", features = ["runtime-async-std-native-tls", "postgres", "json", "chrono"] } strum = "0.19.5" strum_macros = "0.19" -- 2.36.0 From 19fd3426b5f3165175686e8cd289b6900ebce2b6 Mon Sep 17 00:00:00 2001 From: jake Date: Thu, 17 Jun 2021 00:23:23 -0600 Subject: [PATCH 10/13] try this version instead v2 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b71473f..944fbfe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ ages-prs = "0.1" async-trait = "0.1.41" lazy_static = "1.4.0" barrel = { version = "0.6.5", features = ["pg"] } -refinery = { version = "0.4.0", features = ["postgres"] } +refinery = { version = "0.5.0", features = ["postgres"] } sqlx = { version = "0.4.0", features = ["runtime-async-std-native-tls", "postgres", "json", "chrono"] } strum = "0.19.5" strum_macros = "0.19" -- 2.36.0 From b79c2b3ae67964b07b56ecdccaab3dca2e097f2f Mon Sep 17 00:00:00 2001 From: jake Date: Thu, 17 Jun 2021 02:56:41 -0600 Subject: [PATCH 11/13] update async-std to 1.9.0 --- Cargo.toml | 2 +- src/common/mainloop/client.rs | 14 +++++++------- src/common/mainloop/interserver.rs | 20 ++++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 944fbfe..368c23a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] libpso = { git = "http://git.sharnoth.com/jake/libpso" } -async-std = { version = "1.7.0", features = ["unstable", "attributes"] } +async-std = { version = "1.9.0", features = ["unstable", "attributes"] } futures = "0.3.5" rand = "0.7.3" rand_chacha = "0.2.2" diff --git a/src/common/mainloop/client.rs b/src/common/mainloop/client.rs index fff2a4f..31c736c 100644 --- a/src/common/mainloop/client.rs +++ b/src/common/mainloop/client.rs @@ -128,7 +128,7 @@ async fn send_pkt(socket: Arc { - NewClient(ClientId, async_std::sync::Sender), + NewClient(ClientId, async_std::channel::Sender), Packet(ClientId, R), Disconnect(ClientId), } @@ -142,8 +142,8 @@ enum ServerStateAction { fn client_recv_loop(client_id: ClientId, socket: Arc, cipher: Arc>>, - server_sender: async_std::sync::Sender, R>>, - client_sender: async_std::sync::Sender>) + server_sender: async_std::channel::Sender, R>>, + client_sender: async_std::channel::Sender>) where S: SendServerPacket + std::fmt::Debug + Send + 'static, R: RecvServerPacket + std::fmt::Debug + Send + 'static, @@ -181,7 +181,7 @@ fn client_send_loop(client_id: ClientId, socket: Arc, cipher_in: Arc>>, cipher_out: Arc>>, - client_receiver: async_std::sync::Receiver>) + client_receiver: async_std::channel::Receiver>) where S: SendServerPacket + std::fmt::Debug + Send + 'static, { @@ -208,7 +208,7 @@ where } fn state_client_loop(state: Arc>, - server_state_receiver: async_std::sync::Receiver, R>>) where + server_state_receiver: async_std::channel::Receiver, R>>) where STATE: ServerState + Send + 'static, S: SendServerPacket + std::fmt::Debug + Send + 'static, R: RecvServerPacket + std::fmt::Debug + Send + 'static, @@ -294,7 +294,7 @@ where let listener = async_std::net::TcpListener::bind(&std::net::SocketAddr::from((std::net::Ipv4Addr::new(0,0,0,0), client_port))).await.unwrap(); let mut id = 0; - let (server_state_sender, server_state_receiver) = async_std::sync::channel(1024); + let (server_state_sender, server_state_receiver) = async_std::channel::bounded(1024); state_client_loop(state, server_state_receiver); loop { @@ -304,7 +304,7 @@ where info!("new client {:?} {:?} {:?}", client_id, sock, addr); - let (client_sender, client_receiver) = async_std::sync::channel(64); + let (client_sender, client_receiver) = async_std::channel::bounded(64); let socket = Arc::new(sock); let cipher_in: Arc>> = Arc::new(Mutex::new(Box::new(NullCipher {}))); let cipher_out: Arc>> = Arc::new(Mutex::new(Box::new(NullCipher {}))); diff --git a/src/common/mainloop/interserver.rs b/src/common/mainloop/interserver.rs index 8d25bd2..117ebc2 100644 --- a/src/common/mainloop/interserver.rs +++ b/src/common/mainloop/interserver.rs @@ -49,12 +49,12 @@ impl MessageReceiver { #[derive(Debug)] enum InterserverInputAction { - NewConnection(ServerId, async_std::sync::Sender), + NewConnection(ServerId, async_std::channel::Sender), Message(ServerId, R), Disconnect(ServerId), } -async fn interserver_state_loop(state: Arc>, action_receiver: async_std::sync::Receiver>) +async fn interserver_state_loop(state: Arc>, action_receiver: async_std::channel::Receiver>) where A: InterserverActor + Send + 'static, S: Serialize + Send + 'static, @@ -114,8 +114,8 @@ where async fn login_recv_loop(server_id: ServerId, socket: async_std::net::TcpStream, - state_loop_sender: async_std::sync::Sender>, - output_loop_sender: async_std::sync::Sender) + state_loop_sender: async_std::channel::Sender>, + output_loop_sender: async_std::channel::Sender) where S: Serialize + std::fmt::Debug + Send + 'static, R: DeserializeOwned + std::fmt::Debug + Send + 'static, @@ -129,7 +129,7 @@ where match msg_receiver.recv().await { Ok(msg) => { info!("[login recv loop msg] {:?}", msg); - state_loop_sender.send(InterserverInputAction::Message(server_id, msg)).await + state_loop_sender.send(InterserverInputAction::Message(server_id, msg)).await; }, Err(err) => { if let MessageReceiverError::Disconnected = err { @@ -146,7 +146,7 @@ where async fn interserver_send_loop(server_id: ServerId, mut socket: async_std::net::TcpStream, - output_loop_receiver: async_std::sync::Receiver) + output_loop_receiver: async_std::channel::Receiver) where S: Serialize + std::fmt::Debug + Send + 'static, { @@ -185,7 +185,7 @@ pub fn login_listen_mainloop(state: Arc(state: Arc(state: Arc(state: Arc>>, ip: std::net::Ipv4Addr, port: u16) -> Pin>> { Box::pin(async_std::task::spawn(async move { let mut id = 0; - let (server_state_sender, server_state_receiver) = async_std::sync::channel(1024); + let (server_state_sender, server_state_receiver) = async_std::channel::bounded(1024); interserver_state_loop(state.clone(), server_state_receiver).await; @@ -230,7 +230,7 @@ pub fn ship_connect_mainloop(state: Arc Date: Thu, 17 Jun 2021 12:06:01 -0600 Subject: [PATCH 12/13] rename --- src/common/mainloop/interserver.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/mainloop/interserver.rs b/src/common/mainloop/interserver.rs index 117ebc2..526e51d 100644 --- a/src/common/mainloop/interserver.rs +++ b/src/common/mainloop/interserver.rs @@ -156,14 +156,14 @@ where match output_loop_receiver.recv().await { Ok(msg) => { let payload = serde_json::to_string(&msg); - if let Ok(payload2) = payload { - let len_bytes = u32::to_le_bytes(payload2.len() as u32); + if let Ok(payload) = payload { + let len_bytes = u32::to_le_bytes(payload.len() as u32); if let Err(err) = socket.write_all(&len_bytes).await { warn!("interserver send failed: {:?}", err); break; } - if let Err(err) = socket.write_all(&payload2.as_bytes()).await { + if let Err(err) = socket.write_all(&payload.as_bytes()).await { warn!("intserserver send failed: {:?}", err); break; } -- 2.36.0 From cbe2b9a79a39f61fda55062065490c12c214dee4 Mon Sep 17 00:00:00 2001 From: jake Date: Thu, 17 Jun 2021 12:06:36 -0600 Subject: [PATCH 13/13] get it working with latest rust --- README.md | 6 ------ src/lib.rs | 1 - 2 files changed, 7 deletions(-) diff --git a/README.md b/README.md index e2c1ec5..a7bb401 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,5 @@ libpso = { path = "path/to/libpso" } ``` at the end of the `Cargo.toml` file -# rust nightly version -``` -rustup override set nightly-2021-03-15 -``` - - # to actually run it * `cargo run` diff --git a/src/lib.rs b/src/lib.rs index 531b38c..dbf3afa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,4 @@ #![allow(incomplete_features)] -#![feature(const_generics)] #![feature(maybe_uninit_extra)] #![feature(inline_const)] #![feature(drain_filter)] -- 2.36.0