client.go 2.97 KB
//参考:https://jergoo.gitbooks.io/go-grpc-practice-guide/content/chapter2/interceptor.html

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"
	_ "pro2d/conf"
	"pro2d/protos/pb"
	"pro2d/utils"
)

func Register(c pb.LoginClient, phone, password string)  error {
	r, err := c.RegisterHandler(context.Background(), &pb.Register{
		Phone:                "17683852936",
		Password:             "123456",
		Code:     0,
	})

	if err != nil {
		return err
	}
	if r.Code != 0 {
		return fmt.Errorf("register fail")
	}
	utils.Sugar.Debug("register success")
	return nil
}

func Login(loginUri, token, uid string)  {
	var opts []grpc.DialOption
	// 指定自定义认证
	opts = append(opts, grpc.WithPerRPCCredentials(&utils.AuthToken{Token: token}))
	if TLS  {
		// TLS连接
		creds, err := credentials.NewClientTLSFromFile("keys/server.pem", ServerName)
		if err != nil {
			utils.Sugar.Fatalf("Failed to create TLS credentials %v", err)
			return
		}
		opts = append(opts, grpc.WithTransportCredentials(creds))

	}else{
		opts = append(opts, grpc.WithInsecure())
	}

	gameConn, err := grpc.Dial(loginUri, opts...)
	if err != nil {
		utils.Sugar.Errorf("game conn err: %v", err)
		return
	}
	defer gameConn.Close()

	client:= pb.NewGameClient(gameConn)
	var role *pb.Role
	loginRsp, err := client.LoginHandler(context.Background(), &pb.LoginReq{
		Uid: uid,
		Device: "111111",
	})

	if err != nil {
		utils.Sugar.Errorf("login error: %v", err)
		return
	}
	role = loginRsp.Role

	if loginRsp.Code != 0 {
		utils.Sugar.Debugf("login fail, role not exist")
		createRole, err := client.CreateRoleHandler(context.Background(), &pb.LoginReq{Uid: uid, Device: "11111"})
		if err != nil {
			utils.Sugar.Errorf("create role err: %v", err)
			return
		}
		utils.Sugar.Debug("create role rsp: ", createRole.Code)
		role = createRole.Role
	}

	utils.Sugar.Debugf("login successful role: %v", role)
}

const (
	TLS = true
	ServerName = "pro2d"
)

func main() {

	var opts []grpc.DialOption
	if TLS  {
		// TLS连接
		creds, err := credentials.NewClientTLSFromFile("keys/server.pem", ServerName)
		if err != nil {
			utils.Sugar.Fatalf("Failed to create TLS credentials %v", err)
			return
		}
		opts = append(opts, grpc.WithTransportCredentials(creds))

	}else{
		opts = append(opts, grpc.WithInsecure())
	}

	conn, err := grpc.Dial("localhost:8848", opts...)
	if err != nil {
		utils.Sugar.Errorf("conn err: %v", err)
		return
	}
	defer conn.Close()
	c := pb.NewLoginClient(conn)
	//err = Register(c,"17683852936", "123456")
	//if err != nil {
	//	utils.Sugar.Errorf("register err: %v", err)
	//	return
	//}
	rsp, err := c.CreateTokenHandler(context.Background(), &pb.Account{
		Phone:                "17683852936",
		Password:             "123456",
	})

	if err != nil {
		utils.Sugar.Errorf("createtoken err: %v", err)
		return
	}

	if rsp.Code != 0 {
		utils.Sugar.Errorf("createtoken err" )
		return
	}

	if len(rsp.GameService) >0 {
		Login(rsp.GameService[0].Address, rsp.Token, rsp.Uid)
	}
}