3939
4040-- Public types -----------------------------------------------------------
4141
42- export type PacketHandle = {
43- send : (self : PacketHandle , data : any , target : any ? ) -> (),
44- on : (self : PacketHandle , fn : (... any ) -> ()) -> Types .Connection ,
45- once : (self : PacketHandle , fn : (... any ) -> ()) -> Types .Connection ,
46- wait : (self : PacketHandle ) -> ... any ,
47- name : (self : PacketHandle ) -> string ,
48- stats : (self : PacketHandle ) -> Types .PacketStats ,
42+ export type PacketHandle < T > = {
43+ send : (self : PacketHandle < T > , data : T , target : any ? ) -> (),
44+ on : (self : PacketHandle < T > , fn : (data : T , sender : Player ? , timestamp : number ? ) -> ()) -> Types .Connection ,
45+ once : (self : PacketHandle < T > , fn : (data : T , sender : Player ? , timestamp : number ? ) -> ()) -> Types .Connection ,
46+ wait : (self : PacketHandle < T > ) -> ( T , Player ? , number ? ) ,
47+ name : (self : PacketHandle < T > ) -> string ,
48+ stats : (self : PacketHandle < T > ) -> Types .PacketStats ,
4949}
5050
5151-- Public -----------------------------------------------------------------
5252
5353local Packet = {}
5454
55- function Packet .define (
55+ function Packet .define < T > (
5656 name : string ,
57- codec : Types .InternalCodec <any >,
57+ codec : Types .InternalCodec <T >,
5858 options : Types .PacketOptions ?
59- ): PacketHandle
59+ ): PacketHandle < T >
6060 local opts = options or ({} :: Types .PacketOptions )
6161 local isUnreliable = opts .unreliable or false
6262
@@ -189,20 +189,23 @@ function Packet.define(
189189 bumpFires ()
190190 end
191191
192+ type Self = PacketHandle <T >
193+ type Listener = (data : T , sender : Player ? , timestamp : number ? ) -> ()
194+
192195 local handle = {
193- send = function (_self : PacketHandle , data : any , target : any ? ): ()
196+ send = function (_self : Self , data : T , target : any ? ): ()
194197 if IS_SERVER then
195198 sendFromServer (data , target )
196199 else
197200 sendFromClient (data )
198201 end
199202 end ,
200203
201- on = function (_self : PacketHandle , fn : (... any ) -> () ): Types .Connection
202- return reg .signal :connect (fn )
204+ on = function (_self : Self , fn : Listener ): Types .Connection
205+ return reg .signal :connect (fn :: any )
203206 end ,
204207
205- once = function (_self : PacketHandle , fn : (... any ) -> () ): Types .Connection
208+ once = function (_self : Self , fn : Listener ): Types .Connection
206209 local conn : Types .Connection
207210 conn = reg .signal :connect (function (... : any )
208211 conn :disconnect ()
@@ -211,15 +214,15 @@ function Packet.define(
211214 return conn
212215 end ,
213216
214- wait = function (_self : PacketHandle ): ... any
217+ wait = function (_self : Self ): ( T , Player ? , number ? )
215218 return reg .signal :wait ()
216219 end ,
217220
218- name = function (_self : PacketHandle ): string
221+ name = function (_self : Self ): string
219222 return reg .name
220223 end ,
221224
222- stats = function (_self : PacketHandle ): Types .PacketStats
225+ stats = function (_self : Self ): Types .PacketStats
223226 return {
224227 bytesSent = reg .bytesSent ,
225228 bytesReceived = reg .bytesReceived ,
@@ -230,7 +233,7 @@ function Packet.define(
230233 end ,
231234 }
232235
233- return table.freeze (handle ) :: PacketHandle
236+ return table.freeze (handle ) :: PacketHandle < T >
234237end
235238
236239return table.freeze (Packet )
0 commit comments