net_socket_packet/packet/
packethandler.rs

1use 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            // call_back.call(this, packet);
29            // console.info(`Finish handle OPCODE: 0x${packet.opcode.toString(16)} / ${packet.opcode.toString()}`);
30            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
43// 密封特性
44pub(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    /* other public methods */
56
57}