예제 #1
0
파일: main.go 프로젝트: ygmpkk/go-grpc-chat
func bot() func() {
	conn, err := grpc.Dial(":5000")
	if err != nil {
		log.Fatalln("net.Dial:", err)
	}
	client := pb.NewChatClient(conn)

	sid, err := common.Authorize(client, "bot")
	if err != nil {
		log.Fatalln("authorize:", err)
	}

	events, err := common.Connect(client, sid)
	if err != nil {
		log.Fatalln("connect:", err)
	}

	return func() {
		defer conn.Close()
		interval := float64(time.Second) / *m
		time.Sleep(time.Duration(interval * rand.Float64()))
		tick := time.Tick(time.Duration(interval))
		for {
			select {
			case <-tick:
				err := common.Say(client, sid, "foobarbazfoobarbaz")
				if err != nil {
					log.Fatalln("say:", err)
				}
			case <-events:
			}
		}
	}
}
예제 #2
0
파일: main.go 프로젝트: ygmpkk/go-grpc-chat
func main() {
	conn, err := grpc.Dial(":5000")
	if err != nil {
		log.Fatalln("net.Dial:", err)
	}
	defer conn.Close()
	client := pb.NewChatClient(conn)

	var name string
	for {
		fmt.Print("name> ")
		if n, err := fmt.Scanln(&name); err == io.EOF {
			return
		} else if n == 0 {
			fmt.Println("name must be not empty")
			continue
		} else if n > 20 {
			fmt.Println("name must be less than or equal 20 characters")
			continue
		}
		break
	}

	sid, err := common.Authorize(client, name)
	if err != nil {
		log.Fatalln("authorize:", err)
	}

	events, err := common.Connect(client, sid)
	if err != nil {
		log.Fatalln("connect:", err)
	}

	go func() {
		for {
			select {
			case event := <-events:
				switch {
				case event.Join != nil:
					fmt.Printf("%s has joined.\n", event.Join.Name)
				case event.Leave != nil:
					fmt.Printf("%s has left.\n", event.Leave.Name)
				case event.Log != nil:
					fmt.Printf("%s> %s\n", event.Log.Name, event.Log.Message)
				}
			}
		}
	}()

	var message string
	for {
		fmt.Print("> ")
		if n, err := fmt.Scanln(&message); err == io.EOF {
			return
		} else if n > 0 {
			err := common.Say(client, sid, message)
			if err != nil {
				log.Fatalln("say:", err)
			}
		}
	}
}