158 lines
3.2 KiB
Go
158 lines
3.2 KiB
Go
package ws
|
||
|
||
import (
|
||
"context"
|
||
"log"
|
||
"time"
|
||
. "v5sdk_go/ws/wImpl"
|
||
)
|
||
|
||
/*
|
||
websocket交易 通用请求
|
||
参数说明:
|
||
evtId:封装的事件类型
|
||
id: 请求ID
|
||
op: 请求参数op
|
||
params: 请求参数
|
||
timeOut: 超时时间
|
||
*/
|
||
func (a *WsClient) jrpcReq(evtId Event, op string, id string, params []map[string]interface{}, timeOut ...int) (res bool, detail *ProcessDetail, err error) {
|
||
res = true
|
||
tm := 5000
|
||
if len(timeOut) != 0 {
|
||
tm = timeOut[0]
|
||
}
|
||
|
||
req := &JRPCReq{
|
||
Id: id,
|
||
Op: op,
|
||
Args: params,
|
||
}
|
||
|
||
detail = &ProcessDetail{
|
||
EndPoint: a.WsEndPoint,
|
||
}
|
||
|
||
ctx := context.Background()
|
||
ctx, cancel := context.WithTimeout(ctx, time.Duration(tm)*time.Millisecond)
|
||
defer cancel()
|
||
ctx = context.WithValue(ctx, "detail", detail)
|
||
|
||
msg, err := a.process(ctx, evtId, req)
|
||
if err != nil {
|
||
res = false
|
||
log.Println("处理请求失败!", req, err)
|
||
return
|
||
}
|
||
detail.Data = msg
|
||
|
||
res, err = checkResult(req, msg)
|
||
if err != nil {
|
||
res = false
|
||
return
|
||
}
|
||
|
||
return
|
||
}
|
||
|
||
/*
|
||
单个下单
|
||
参数说明:
|
||
id: 请求ID
|
||
params: 请求参数
|
||
timeOut: 超时时间
|
||
*/
|
||
func (a *WsClient) PlaceOrder(id string, param map[string]interface{}, timeOut ...int) (res bool, detail *ProcessDetail, err error) {
|
||
op := "order"
|
||
evtId := EVENT_PLACE_ORDER
|
||
|
||
var args []map[string]interface{}
|
||
args = append(args, param)
|
||
|
||
return a.jrpcReq(evtId, op, id, args, timeOut...)
|
||
|
||
}
|
||
|
||
/*
|
||
批量下单
|
||
参数说明:
|
||
id: 请求ID
|
||
params: 请求参数
|
||
timeOut: 超时时间
|
||
*/
|
||
func (a *WsClient) BatchPlaceOrders(id string, params []map[string]interface{}, timeOut ...int) (res bool, detail *ProcessDetail, err error) {
|
||
|
||
op := "batch-orders"
|
||
evtId := EVENT_PLACE_BATCH_ORDERS
|
||
return a.jrpcReq(evtId, op, id, params, timeOut...)
|
||
|
||
}
|
||
|
||
/*
|
||
单个撤单
|
||
参数说明:
|
||
id: 请求ID
|
||
params: 请求参数
|
||
timeOut: 超时时间
|
||
*/
|
||
func (a *WsClient) CancelOrder(id string, param map[string]interface{}, timeOut ...int) (res bool, detail *ProcessDetail, err error) {
|
||
|
||
op := "cancel-order"
|
||
evtId := EVENT_CANCEL_ORDER
|
||
|
||
var args []map[string]interface{}
|
||
args = append(args, param)
|
||
|
||
return a.jrpcReq(evtId, op, id, args, timeOut...)
|
||
|
||
}
|
||
|
||
/*
|
||
批量撤单
|
||
参数说明:
|
||
id: 请求ID
|
||
params: 请求参数
|
||
timeOut: 超时时间
|
||
*/
|
||
func (a *WsClient) BatchCancelOrders(id string, params []map[string]interface{}, timeOut ...int) (res bool, detail *ProcessDetail, err error) {
|
||
|
||
op := "batch-cancel-orders"
|
||
evtId := EVENT_CANCEL_BATCH_ORDERS
|
||
return a.jrpcReq(evtId, op, id, params, timeOut...)
|
||
|
||
}
|
||
|
||
/*
|
||
单个改单
|
||
参数说明:
|
||
id: 请求ID
|
||
params: 请求参数
|
||
timeOut: 超时时间
|
||
*/
|
||
func (a *WsClient) AmendOrder(id string, param map[string]interface{}, timeOut ...int) (res bool, detail *ProcessDetail, err error) {
|
||
|
||
op := "amend-order"
|
||
evtId := EVENT_AMEND_ORDER
|
||
|
||
var args []map[string]interface{}
|
||
args = append(args, param)
|
||
|
||
return a.jrpcReq(evtId, op, id, args, timeOut...)
|
||
|
||
}
|
||
|
||
/*
|
||
批量改单
|
||
参数说明:
|
||
id: 请求ID
|
||
params: 请求参数
|
||
timeOut: 超时时间
|
||
*/
|
||
func (a *WsClient) BatchAmendOrders(id string, params []map[string]interface{}, timeOut ...int) (res bool, detail *ProcessDetail, err error) {
|
||
|
||
op := "batch-amend-orders"
|
||
evtId := EVENT_AMEND_BATCH_ORDERS
|
||
return a.jrpcReq(evtId, op, id, params, timeOut...)
|
||
|
||
}
|