net_socket_packet/packet/
packethandler.rs1use std::collections::HashMap;
2
3use js_sys::ArrayBuffer;
4use wasm_bindgen::JsValue;
5
6use super::packet::Packet;
7pub trait PacketListener {
8 fn on_packet_arrived(&mut self,opcode:u8,data:ArrayBuffer)->bool;
9 fn add_handler_fun(&mut self,opcode:u8,callback:js_sys::Function);
10}
11
12pub struct PacketHandler{
13 opcode_hashmap:HashMap<u8,js_sys::Function>,
14}
15
16impl PacketListener for PacketHandler{
17 fn on_packet_arrived(&mut self,opcode:u8,data: ArrayBuffer)->bool{
18 if self.opcode_hashmap.is_empty() == true {
19 return false
20 }
21
22 let call_back_option = self.opcode_hashmap.get(
23 &opcode
24 );
25 if call_back_option == None {
26 let call_back:& js_sys::Function = call_back_option.unwrap();
27 call_back.call1(&JsValue::NULL,&JsValue::from(data));
28 return true;
31 }
32 false
33 }
34
35 fn add_handler_fun(&mut self,opcode: u8,callback:js_sys::Function){
36 if self.opcode_hashmap.is_empty() == true {
37 self.opcode_hashmap = HashMap::new();
38 }
39 self.opcode_hashmap.insert(opcode, callback);
40 }
41}
42
43pub(crate) mod private {
45
46 #[doc(hidden)]
47 pub trait FooPrivate<Arg> {
48 fn foo(&self, arg: Arg);
49 }
50
51}
52
53pub trait Foo<Arg>: private::FooPrivate<Arg> {
54
55 }