go_study/bilibili/aceld/IM-System/client/client.go

103 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 客户端应用
package main
import (
"flag"
"fmt"
"net"
)
type Client struct {
ServerIp string
ServerPort int
Name string
conn net.Conn
flag int // 当前client模式
}
func NewClient(serverIp string, serverPort int) *Client {
// 创建Client对象
client := &Client{
ServerIp: serverIp,
ServerPort: serverPort,
flag: 999,
}
// 连接Server
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", serverIp, serverPort))
if err != nil {
fmt.Println("net.Dial err:", err)
return nil
}
client.conn = conn
// 返回Client对象
return client
}
func (client *Client) menu() bool {
var flag int
fmt.Println("1. 公聊模式")
fmt.Println("2. 私聊模式")
fmt.Println("3. 更新用户名")
fmt.Println("0. 退出")
fmt.Scanln(&flag)
client.flag = flag
if flag >= 0 && flag <= 3 {
return true
} else {
fmt.Println(">>>>>> 请输入合法的数字 <<<<<<")
return false
}
}
func (client *Client) Run() {
for client.flag != 0 {
for !client.menu() {
}
// 根据不同的模式处理不同的业务
switch client.flag {
case 1:
// 公聊模式
fmt.Println("已选择公聊模式...")
case 2:
// 私聊模式
fmt.Println("已选择私聊模式...")
case 3:
// 更新用户名
fmt.Println("已选择更新用户名模式...")
}
}
}
// 定义全局变量
var serverIp string
// 定义全局变量
var serverPort int
// init函数会在main函数之前执行
func init() {
// ./client -ip 127.0.0.1
flag.StringVar(&serverIp, "ip", "127.0.0.1", "设置服务端IP地址默认127.0.0.1")
// ./client -port 8888
flag.IntVar(&serverPort, "port", 8888, "设置服务端端口默认8888")
}
func main() {
// 解析命令行传参
flag.Parse()
client := NewClient(serverIp, serverPort)
if client == nil {
fmt.Println(">>>>>> 连接服务器失败!")
return
}
fmt.Println(">>>>>> 连接服务器成功……")
// for {
// time.Sleep(1 * time.Second)
// }
client.Run()
}