huang
2025-03-14 3450516ed847b35904c1cdda0f0a19b65511e645
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
{
    let field_panel_style="margin-left:15px;display:flex;flex-wrap:wrap";
    let field_style="display:grid;grid-template-columns:100px 50px;width:150px;margin-right:15px";
    let field_head_style="";
    let field_value_style="border:1px solid gray";
    var cfg={
        header:{
            name:"ddddd",
            column:3
        },
        body:[
            {
                name:"请求",
                fields:[
                    {
                        offset:0,
                        name:"abc",
                        type:"short"
                    }
                ]
            }
        ]
    };
 
    
   
 
    class MessageDecoder{
 
        
      
 
        constructor(cfg,div){
            this.config=cfg;
            this.fields=[];
            var off1=cfg.header.baseOffset;
           
            this.view=document.createElement("div");
            for(var i=0;i<this.config.body.length;i++){
                var bd=this.config.body[i];
                var hd=document.createElement("div");
                hd.innerText=bd.name;
                this.view.appendChild(hd);
                var ct=document.createElement("div");
                ct.style=field_panel_style;
                this.view.appendChild(ct);
                var off2=bd.baseOffset;
                for(var j=0;j<bd.fields.length;j++){
                    var fd=bd.fields[j];
                   
                    var fb=document.createElement("div");
                    fb.style=field_style;
                    var itm=document.createElement("span");
                    itm.style=field_head_style;
                    itm.innerText=fd.name;
                    fb.appendChild(itm);
                    itm=document.createElement("span");
                    itm.style=field_value_style;
                    itm.innerText="--";
                    fb.appendChild(itm);
                   
                    var fdb={
                        offset:fd.offset+off1+off2,
                        view:itm,
                        type:fd.type
                    };
                    this.fields.push(fdb);
                    ct.appendChild(fb);
                }
            }
            div.appendChild(this.view);
        }
;
        update(data){
            for(var i=0;i<this.fields.length;i++){
                var vd=this.fields[i];
                var begin=vd.offset*2;
                var end=begin;
                switch(vd.type){
                    case "short":
                      end=begin+4;
                      if(begin<0 || end>data.length)
                       break;
 
                     var st=Number("0x0000"+data.substring(begin,end));
                     vd.view.innerText=st;     
                }
            }
        }
    }
 
    function createMessageDecoder(config,div){
        return new MessageDecoder(config,div);
    }
 
}