package tcp import ( "encoding/json" "net" ) func Do( addr, route string, method Method, params map[string]string, body []byte, ) (*Response, error) { conn, err := net.Dial("tcp", addr) if err != nil { return nil, err } defer conn.Close() reqHeader := RequestHeader{ Method: method, Route: route, Params: params, } rawHeader, err := json.Marshal(reqHeader) if err != nil { return nil, err } if err := sendFrame(conn, rawHeader); err != nil { return nil, err } if err := sendFrame(conn, body); err != nil { return nil, err } rawHeader, err = readFrame(conn) if err != nil { return nil, err } var resHeader ResponseHeader if err := json.Unmarshal(rawHeader, &resHeader); err != nil { return nil, err } body, err = readFrame(conn) if err != nil { return nil, err } return &Response{ StatusCode: resHeader.StatusCode, Body: body, RemoteAddr: conn.RemoteAddr().String(), }, nil } func Get( addr, route string, params map[string]string, ) (*Response, error) { return Do(addr, route, MethodGET, params, nil) } func Post( addr, route string, params map[string]string, b []byte, ) (*Response, error) { return Do(addr, route, MethodPOST, params, b) }