@@ -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