Skip to content

Commit e5293b3

Browse files
committed
Implement reflector
1 parent 53049b5 commit e5293b3

1 file changed

Lines changed: 104 additions & 3 deletions

File tree

reflector/server.go

Lines changed: 104 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,120 @@ func handleConnection(conn net.Conn) {
2424
jsonDecoder := json.NewDecoder(conn)
2525
jsonEncoder := json.NewEncoder(conn)
2626

27+
version := -1
28+
29+
var blobHash string
30+
blobSize := -1
31+
32+
var sdBlobHash string
33+
sdBlobSize := -1
34+
2735
for {
2836
var data map[string]any
2937

3038
err := jsonDecoder.Decode(&data)
39+
3140
if err != nil {
3241
if err == io.EOF {
3342
fmt.Println("Client disconnected")
3443
return
3544
}
36-
// TODO Handle error (return OR continue)
45+
continue
46+
}
47+
48+
versionValue, hasVersion := data["version"].(int)
49+
if version == -1 {
50+
if hasVersion {
51+
version = versionValue
52+
jsonEncoder.Encode(map[string]any{
53+
"version": version,
54+
})
55+
continue
56+
}
57+
conn.Close()
58+
return
59+
}
60+
61+
blobHashValue, hasBlobHash := data["blob_hash"].(string)
62+
blobSizeValue, hasBlobSize := data["blob_size"].(int)
63+
64+
sdBlobHashValue, hasSDBlobHash := data["sd_blob_hash"].(string)
65+
sdBlobSizeValue, hasSDBlobSize := data["sd_blob_size"].(int)
66+
67+
if blobHash == "" && version >= 0 {
68+
if hasBlobHash && hasBlobSize {
69+
if len(blobHashValue) != 96 || blobSizeValue <= 0 || blobSizeValue > 2097152 {
70+
conn.Close()
71+
return
72+
}
73+
74+
blobHash = blobHashValue
75+
blobSize = blobSizeValue
76+
77+
jsonEncoder.Encode(map[string]any{
78+
"send_blob": false, // TODO: Improve response
79+
})
80+
continue
81+
}
82+
}
83+
84+
if sdBlobHash == "" && version >= 1 {
85+
if hasSDBlobHash && hasSDBlobSize {
86+
if len(blobHashValue) != 96 || blobSizeValue <= 0 || blobSizeValue > 2097152 {
87+
conn.Close()
88+
return
89+
}
90+
91+
sdBlobHash = sdBlobHashValue
92+
sdBlobSize = sdBlobSizeValue
93+
94+
jsonEncoder.Encode(map[string]any{
95+
"send_sd_blob": false, // TODO: Improve response
96+
})
97+
continue
98+
}
99+
}
100+
101+
if blobHash != "" {
102+
blobData := make([]byte, blobSize)
103+
_, err := io.ReadFull(conn, blobData)
104+
105+
//TODO Process blob data
106+
fmt.Printf("%+v\n", blobData)
107+
108+
jsonEncoder.Encode(map[string]any{
109+
"received_blob": err == nil,
110+
})
111+
if err != nil {
112+
conn.Close()
113+
return
114+
}
115+
116+
blobHash = ""
117+
blobSize = -1
118+
continue
119+
}
120+
if sdBlobHash != "" {
121+
sdBlobData := make([]byte, sdBlobSize)
122+
_, err := io.ReadFull(conn, sdBlobData)
123+
124+
//TODO Process SD blob data
125+
fmt.Printf("%+v\n", sdBlobData)
126+
127+
jsonEncoder.Encode(map[string]any{
128+
"received_sd_blob": err == nil,
129+
})
130+
if err != nil {
131+
conn.Close()
132+
return
133+
}
134+
135+
sdBlobHash = ""
136+
sdBlobSize = -1
137+
continue
37138
}
38139

39-
fmt.Printf("%+v\n", data)
40-
jsonEncoder.Encode(map[string]any{})
140+
conn.Close()
141+
return
41142
}
42143
}

0 commit comments

Comments
 (0)