sqlite的api,便于内部使用
liuxiaolong
2019-05-31 e49473afa5e9c1586c06b971d19fbc51560deef6
reqrepClient.go
@@ -1,43 +1,69 @@
package dbapi
import (
   "fmt"
   "os"
   "nanomsg.org/go-mangos"
   "nanomsg.org/go-mangos/protocol/req"
   "nanomsg.org/go-mangos/transport/ipc"
   "nanomsg.org/go-mangos/transport/tcp"
   "basic.com/valib/deliver.git"
   "encoding/json"
   "errors"
)
type ReqrepApi struct {
type ReqRepClient struct {}
var ReqRep_URL = "tcp://192.168.1.11:8002"
//初始化rply的地址
func InitRplyUrl(url string) {
   ReqRep_URL = url
}
const (
   ReqRep_URL = "tcp://127.0.0.1:8002"
)
func (api ReqRepClient) DoGetRequest(url string, params map[string]string, headers map[string]string) ([]byte, error) {
   var reqBody RplyParamBody
   reqBody.Action = url
   var destMap map[string]interface{}
   for idx,val := range params {
      destMap[idx] = interface{}(val)
   }
   reqBody.Params = destMap
   return doRply(reqBody)
}
func (api ReqrepApi)SendRequest(reqStr string) string {
   var sock mangos.Socket
   var err error
   var msg []byte
func (api ReqRepClient) DoPostRequest(url string, contentType string, body map[string]interface{}, params map[string]string, headers map[string]string) ([]byte, error) {
   var reqBody RplyParamBody
   reqBody.Action = url
   reqBody.Params = body
   return doRply(reqBody)
}
   if sock, err = req.NewSocket(); err !=nil {
      fmt.Println("can't get new req socket!")
      os.Exit(1)
func (api ReqRepClient) DoPutRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error) {
   var reqBody RplyParamBody
   reqBody.Action = url
   reqBody.Params = body
   return doRply(reqBody)
}
func (api ReqRepClient) DoDeleteRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error) {
   var reqBody RplyParamBody
   reqBody.Action = url
   reqBody.Params = body
   return doRply(reqBody)
}
type RplyParamBody struct {
   Action string   `json:"action"`   //根据action判断做何种响应
   Params map[string]interface{}   `json:"params"`//参数map
}
func doRply(body RplyParamBody)([]byte,error){
   sender := deliver.NewClient(deliver.Mode(deliver.ReqRep), ReqRep_URL)
   bytes,err := json.Marshal(body)
   if err !=nil {
      return nil,err
   }
   sock.AddTransport(ipc.NewTransport())
   sock.AddTransport(tcp.NewTransport())
   if err = sock.Dial(ReqRep_URL);err !=nil {
      fmt.Println("can't dial on req socket!!")
      os.Exit(1)
   err = sender.Send(bytes)
   if err !=nil {
      resMsg, _ := sender.Recv()
      if resMsg !=nil {
         return resMsg,nil
      }
   }
   if err =sock.Send([]byte(reqStr));err !=nil {
      fmt.Println("can't send msg")
   }
   if msg,err = sock.Recv();err !=nil {
      fmt.Println("can't get msg from mangos reqrep server")
   }
   defer sock.Close()
   return string(msg)
   return nil,errors.New("nng no resp")
}