MCPcopy
hub / github.com/thrasher-corp/gocryptotrader / wsHandleData

Method wsHandleData

exchanges/binance/binance_websocket.go:169–414  ·  view source on GitHub ↗
(ctx context.Context, respRaw []byte)

Source from the content-addressed store, hash-verified

167}
168
169func (e *Exchange) wsHandleData(ctx context.Context, respRaw []byte) error {
170 if id, err := jsonparser.GetString(respRaw, "id"); err == nil {
171 if e.Websocket.Match.IncomingWithData(id, respRaw) {
172 return nil
173 }
174 }
175
176 if resultString, err := jsonparser.GetUnsafeString(respRaw, "result"); err == nil {
177 if resultString == "null" {
178 return nil
179 }
180 }
181 jsonData, _, _, err := jsonparser.Get(respRaw, "data")
182 if err != nil {
183 return fmt.Errorf("%s %s %s", e.Name, websocket.UnhandledMessage, string(respRaw))
184 }
185 var event string
186 event, err = jsonparser.GetUnsafeString(jsonData, "e")
187 if err == nil {
188 switch event {
189 case "outboundAccountPosition":
190 var data WsAccountPositionData
191 err = json.Unmarshal(jsonData, &data)
192 if err != nil {
193 return fmt.Errorf("%v - Could not convert to outboundAccountPosition structure %s",
194 e.Name,
195 err)
196 }
197 return e.Websocket.DataHandler.Send(ctx, data)
198 case "balanceUpdate":
199 var data WsBalanceUpdateData
200 err = json.Unmarshal(jsonData, &data)
201 if err != nil {
202 return fmt.Errorf("%v - Could not convert to balanceUpdate structure %s",
203 e.Name,
204 err)
205 }
206 return e.Websocket.DataHandler.Send(ctx, data)
207 case "executionReport":
208 var data WsOrderUpdateData
209 err = json.Unmarshal(jsonData, &data)
210 if err != nil {
211 return fmt.Errorf("%v - Could not convert to executionReport structure %s",
212 e.Name,
213 err)
214 }
215 avgPrice := 0.0
216 if data.CumulativeFilledQuantity != 0 {
217 avgPrice = data.CumulativeQuoteTransactedQuantity / data.CumulativeFilledQuantity
218 }
219 remainingAmount := data.Quantity - data.CumulativeFilledQuantity
220 var pair currency.Pair
221 var assetType asset.Item
222 pair, assetType, err = e.GetRequestFormattedPairAndAssetType(data.Symbol)
223 if err != nil {
224 return err
225 }
226 var feeAsset currency.Code

Callers 10

wsReadDataMethod · 0.95
BenchmarkWsHandleDataFunction · 0.45
TestWsTickerUpdateFunction · 0.45
TestWsKlineUpdateFunction · 0.45
TestWsTradeUpdateFunction · 0.45
TestWsDepthUpdateFunction · 0.45
TestWsBalanceUpdateFunction · 0.45
TestWsOCOFunction · 0.45

Calls 15

UpdateLocalBufferMethod · 0.95
NewCodeFunction · 0.92
StringToOrderTypeFunction · 0.92
StringToOrderSideFunction · 0.92
IsTradeFeedEnabledMethod · 0.80
Float64Method · 0.80
stringToOrderStatusFunction · 0.70
formatToIntervalFunction · 0.70
IncomingWithDataMethod · 0.65

Tested by 9

BenchmarkWsHandleDataFunction · 0.36
TestWsTickerUpdateFunction · 0.36
TestWsKlineUpdateFunction · 0.36
TestWsTradeUpdateFunction · 0.36
TestWsDepthUpdateFunction · 0.36
TestWsBalanceUpdateFunction · 0.36
TestWsOCOFunction · 0.36