init
This commit is contained in:
187
logic/grpc/server.go
Normal file
187
logic/grpc/server.go
Normal file
@@ -0,0 +1,187 @@
|
||||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/golang/protobuf/proto"
|
||||
"gitlab.33.cn/chat/im-pkg/trace"
|
||||
pb "gitlab.33.cn/chat/im/api/logic/grpc"
|
||||
"gitlab.33.cn/chat/im/logic"
|
||||
"gitlab.33.cn/chat/im/logic/conf"
|
||||
"google.golang.org/grpc"
|
||||
_ "google.golang.org/grpc/encoding/gzip"
|
||||
"google.golang.org/grpc/keepalive"
|
||||
)
|
||||
|
||||
func New(c *conf.RPCServer, l *logic.Logic) *grpc.Server {
|
||||
keepParams := grpc.KeepaliveParams(keepalive.ServerParameters{
|
||||
MaxConnectionIdle: time.Duration(c.IdleTimeout),
|
||||
MaxConnectionAgeGrace: time.Duration(c.ForceCloseWait),
|
||||
Time: time.Duration(c.KeepAliveInterval),
|
||||
Timeout: time.Duration(c.KeepAliveTimeout),
|
||||
MaxConnectionAge: time.Duration(c.MaxLifeTime),
|
||||
})
|
||||
connectionTimeout := grpc.ConnectionTimeout(time.Duration(c.Timeout))
|
||||
srv := grpc.NewServer(keepParams, connectionTimeout,
|
||||
grpc.ChainUnaryInterceptor(
|
||||
trace.OpentracingServerInterceptor,
|
||||
))
|
||||
pb.RegisterLogicServer(srv, &server{srv: l})
|
||||
lis, err := net.Listen(c.Network, c.Addr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
go func() {
|
||||
if err := srv.Serve(lis); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
return srv
|
||||
}
|
||||
|
||||
type server struct {
|
||||
pb.UnimplementedLogicServer
|
||||
srv *logic.Logic
|
||||
}
|
||||
|
||||
var _ pb.LogicServer = &server{}
|
||||
|
||||
// Connect connect a conn.
|
||||
func (s *server) Connect(ctx context.Context, req *pb.ConnectReq) (*pb.ConnectReply, error) {
|
||||
mid, appId, key, hb, err := s.srv.Connect(ctx, req.Server, req.Proto)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.ConnectReply{Key: key, AppId: appId, Mid: mid, Heartbeat: hb}, nil
|
||||
}
|
||||
|
||||
// Disconnect disconnect a conn.
|
||||
func (s *server) Disconnect(ctx context.Context, req *pb.DisconnectReq) (*pb.Reply, error) {
|
||||
_, err := s.srv.Disconnect(ctx, req.Key, req.Server)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true}, nil
|
||||
}
|
||||
|
||||
// Heartbeat beartbeat a conn.
|
||||
func (s *server) Heartbeat(ctx context.Context, req *pb.HeartbeatReq) (*pb.Reply, error) {
|
||||
if err := s.srv.Heartbeat(ctx, req.Key, req.Server); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true}, nil
|
||||
}
|
||||
|
||||
// Receive receive a message from client.
|
||||
func (s *server) Receive(ctx context.Context, req *pb.ReceiveReq) (*pb.Reply, error) {
|
||||
if err := s.srv.Receive(ctx, req.Key, req.Proto); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) PushByMids(ctx context.Context, req *pb.MidsMsg) (*pb.Reply, error) {
|
||||
reply, err := s.srv.PushByMids(ctx, req.AppId, req.ToIds, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) PushByKeys(ctx context.Context, req *pb.KeysMsg) (*pb.Reply, error) {
|
||||
reply, err := s.srv.PushByKeys(ctx, req.AppId, req.ToKeys, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) PushGroup(ctx context.Context, req *pb.GroupMsg) (*pb.Reply, error) {
|
||||
reply, err := s.srv.PushGroup(ctx, req.AppId, req.Group, req.Msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) JoinGroupsByKeys(ctx context.Context, req *pb.GroupsKey) (*pb.Reply, error) {
|
||||
reply, err := s.srv.JoinGroupsByKeys(ctx, req.AppId, req.Keys, req.Gid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) JoinGroupsByMids(ctx context.Context, req *pb.GroupsMid) (*pb.Reply, error) {
|
||||
reply, err := s.srv.JoinGroupsByMids(ctx, req.AppId, req.Mids, req.Gid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) LeaveGroupsByKeys(ctx context.Context, req *pb.GroupsKey) (*pb.Reply, error) {
|
||||
reply, err := s.srv.LeaveGroupsByKeys(ctx, req.AppId, req.Keys, req.Gid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) LeaveGroupsByMids(ctx context.Context, req *pb.GroupsMid) (*pb.Reply, error) {
|
||||
reply, err := s.srv.LeaveGroupsByMids(ctx, req.AppId, req.Mids, req.Gid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
|
||||
// Push push a biz message to client.
|
||||
func (s *server) DelGroups(ctx context.Context, req *pb.DelGroupsReq) (*pb.Reply, error) {
|
||||
reply, err := s.srv.DelGroups(ctx, req.AppId, req.Gid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
msg, err := proto.Marshal(reply)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.Reply{IsOk: true, Msg: msg}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user