package grpc_conn

import (
	"common/log"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"google.golang.org/grpc/keepalive"
	"time"
)

type GrpcConnection struct {
	sid  int64
	conn *grpc.ClientConn
}

func NewGrpcConnection(sid int64, address string) (*GrpcConnection, error) {
	p := &GrpcConnection{
		sid: sid,
	}
	conn, err := grpc.NewClient(
		address,
		grpc.WithTransportCredentials(insecure.NewCredentials()),
		grpc.WithKeepaliveParams(
			keepalive.ClientParameters{
				Time:                30 * time.Second, // 保活探测包发送的时间间隔
				Timeout:             10 * time.Second, // 保活探测包的超时时间
				PermitWithoutStream: true,
			},
		),
		//grpc.WithStatsHandler(&StatsHandler{}),
	)
	if err != nil {
		log.Errorf("create grpc err: %v, sid: %v, addr: %v", err, sid, address)
		return nil, err
	}
	p.conn = conn
	return p, nil
}

func (g *GrpcConnection) GetConnection() *grpc.ClientConn {
	return g.conn
}
