11#![ deny( missing_docs) ]
22
3- use crate :: {
4- io:: { GraalIoError , io_vec:: IntoSyncGraalWriterRef } ,
5- net:: packet:: { GPacket , PacketId } ,
3+ use serde:: Serialize ;
4+
5+ use crate :: net:: {
6+ packet:: { GPacket , PacketId } ,
7+ serialization:: { GString , serialize:: serialize_to_vector} ,
68} ;
79
810use super :: FromClientPacketId ;
911
1012/// RcLogin packet.
11- #[ derive( Debug ) ]
13+ #[ derive( Debug , Serialize ) ]
1214pub struct RcLogin {
1315 /// Encryption key.
14- pub encryption_key : u32 ,
16+ pub encryption_key : u8 ,
1517 /// Version.
1618 pub version : String ,
1719 /// Account.
18- pub account : String ,
20+ pub account : GString ,
1921 /// Password.
20- pub password : String ,
21- /// Platform.
22- pub platform : String ,
22+ pub password : GString ,
2323 /// PC IDs
24- pub pc_ids : Vec < String > ,
24+ pub identification : Vec < String > ,
2525}
2626
2727impl RcLogin {
2828 /// Create a new RcLogin packet.
29- pub fn new (
30- encryption_key : u32 ,
31- version : String ,
32- account : String ,
33- password : String ,
34- platform : String ,
35- pc_ids : Vec < String > ,
36- ) -> Self {
29+ pub fn new < S > (
30+ encryption_key : u8 ,
31+ version : S ,
32+ account : S ,
33+ password : S ,
34+ identification : Vec < String > ,
35+ ) -> Self
36+ where
37+ S : Into < String > ,
38+ {
3739 Self {
3840 encryption_key,
39- version,
40- account,
41- password,
42- platform,
43- pc_ids,
44- }
45- }
46-
47- fn serialize ( & self ) -> Result < Vec < u8 > , GraalIoError > {
48- let mut vec = Vec :: new ( ) ;
49- {
50- let mut writer = vec. into_sync_graal_writer ( ) ;
51-
52- writer. write_gu8 ( self . encryption_key . into ( ) ) ?;
53- writer. write_bytes ( self . version . as_bytes ( ) ) ?;
54- writer. write_gstring ( & self . account ) ?;
55- writer. write_gstring ( & self . password ) ?;
56- writer. write_bytes ( self . platform . as_bytes ( ) ) ?;
57- writer. write_bytes ( b",\" " ) ?;
58- for ( i, pc_id) in self . pc_ids . iter ( ) . enumerate ( ) {
59- if i > 0 {
60- writer. write_bytes ( b"\" ,\" " ) ?;
61- }
62- writer. write_bytes ( pc_id. as_bytes ( ) ) ?;
63- }
64- writer. write_bytes ( b"\" " ) ?;
65- writer. flush ( ) ?;
41+ version : version. into ( ) ,
42+ account : GString ( account. into ( ) ) ,
43+ password : GString ( password. into ( ) ) ,
44+ identification,
6645 }
67-
68- Ok ( vec)
6946 }
7047}
7148
@@ -75,7 +52,6 @@ impl GPacket for RcLogin {
7552 }
7653
7754 fn data ( & self ) -> Vec < u8 > {
78- self . serialize ( )
79- . expect ( "Failed to serialize RcLogin packet" )
55+ serialize_to_vector ( & self ) . expect ( "Failed to serialize RcLogin packet" )
8056 }
8157}
0 commit comments