You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
3.4 KiB

/**
* Created by GoLand.
* User: link1st
* Date: 2019-08-03
* Time: 16:43
*/
package grpcclient
import (
"context"
"errors"
"fmt"
"google.golang.org/grpc"
"gowebsocket/common"
"gowebsocket/models"
"gowebsocket/protobuf"
"time"
)
// rpc client
// 给全体用户发送消息
// link::https://github.com/grpc/grpc-go/blob/master/examples/helloworld/greeter_client/main.go
func SendMsgAll(server *models.Server, seq string, appId uint32, userId string, cmd string, message string) (sendMsgId string, err error) {
// Set up a connection to the server.
conn, err := grpc.Dial(server.String(), grpc.WithInsecure())
if err != nil {
fmt.Println("连接失败", server.String())
return
}
defer conn.Close()
c := protobuf.NewAccServerClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
req := protobuf.SendMsgAllReq{
Seq: seq,
AppId: appId,
UserId: userId,
Cms: cmd,
Msg: message,
}
rsp, err := c.SendMsgAll(ctx, &req)
if err != nil {
fmt.Println("给全体用户发送消息", err)
return
}
if rsp.GetRetCode() != common.OK {
fmt.Println("给全体用户发送消息", rsp.String())
err = errors.New(fmt.Sprintf("发送消息失败 code:%d", rsp.GetRetCode()))
return
}
sendMsgId = rsp.GetSendMsgId()
fmt.Println("给全体用户发送消息 成功:", sendMsgId)
return
}
// 获取用户列表
// link::https://github.com/grpc/grpc-go/blob/master/examples/helloworld/greeter_client/main.go
func GetUserList(server *models.Server, appId uint32) (userIds []string, err error) {
userIds = make([]string, 0)
conn, err := grpc.Dial(server.String(), grpc.WithInsecure())
if err != nil {
fmt.Println("连接失败", server.String())
return
}
defer conn.Close()
c := protobuf.NewAccServerClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
req := protobuf.GetUserListReq{
AppId: appId,
}
rsp, err := c.GetUserList(ctx, &req)
if err != nil {
fmt.Println("获取用户列表 发送请求错误:", err)
return
}
if rsp.GetRetCode() != common.OK {
fmt.Println("获取用户列表 返回码错误:", rsp.String())
err = errors.New(fmt.Sprintf("发送消息失败 code:%d", rsp.GetRetCode()))
return
}
userIds = rsp.GetUserId()
fmt.Println("获取用户列表 成功:", userIds)
return
}
// rpc client
// 发送消息
// link::https://github.com/grpc/grpc-go/blob/master/examples/helloworld/greeter_client/main.go
func SendMsg(server *models.Server, seq string, appId uint32, userId string, cmd string, msgType string, message string) (sendMsgId string, err error) {
// Set up a connection to the server.
conn, err := grpc.Dial(server.String(), grpc.WithInsecure())
if err != nil {
fmt.Println("连接失败", server.String())
return
}
defer conn.Close()
c := protobuf.NewAccServerClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
req := protobuf.SendMsgReq{
Seq: seq,
AppId: appId,
UserId: userId,
Cms: cmd,
Type: msgType,
Msg: message,
IsLocal: false,
}
rsp, err := c.SendMsg(ctx, &req)
if err != nil {
fmt.Println("发送消息", err)
return
}
if rsp.GetRetCode() != common.OK {
fmt.Println("发送消息", rsp.String())
err = errors.New(fmt.Sprintf("发送消息失败 code:%d", rsp.GetRetCode()))
return
}
sendMsgId = rsp.GetSendMsgId()
fmt.Println("发送消息 成功:", sendMsgId)
return
}