gorush/rpc/server.go

70 lines
1.6 KiB
Go

package rpc
import (
"net"
"github.com/appleboy/gorush/gorush"
pb "github.com/appleboy/gorush/rpc/proto"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
const (
port = ":50051"
)
// server is used to implement gorush grpc server.
type server struct{}
// Send implements helloworld.GreeterServer
func (s *server) Send(ctx context.Context, in *pb.NotificationRequest) (*pb.NotificationReply, error) {
notification := gorush.PushNotification{
Platform: int(in.Platform),
Tokens: in.Tokens,
Message: in.Message,
Title: in.Title,
Topic: in.Topic,
APIKey: in.Key,
}
success := false
switch notification.Platform {
case gorush.PlatFormIos:
success = gorush.PushToIOS(notification)
case gorush.PlatFormAndroid:
success = gorush.PushToAndroid(notification)
}
return &pb.NotificationReply{
Success: success,
Counts: int32(len(notification.Tokens)),
}, nil
}
// RunGRPCServer run gorush grpc server
func RunGRPCServer() error {
if !gorush.PushConf.GRPC.Enabled {
gorush.LogAccess.Debug("gRPC server is disabled.")
return nil
}
lis, err := net.Listen("tcp", ":"+gorush.PushConf.GRPC.Port)
if err != nil {
gorush.LogError.Error("failed to listen: %v", err)
return err
}
s := grpc.NewServer()
pb.RegisterGorushServer(s, &server{})
// Register reflection service on gRPC server.
reflection.Register(s)
gorush.LogAccess.Debug("gRPC server is running on " + gorush.PushConf.GRPC.Port + " port.")
if err := s.Serve(lis); err != nil {
gorush.LogError.Error("failed to serve: %v", err)
return err
}
return nil
}