diff --git a/bilibili/aceld/IM-System/client/client.go b/bilibili/aceld/IM-System/client/client.go index 39fb145..3dbf638 100644 --- a/bilibili/aceld/IM-System/client/client.go +++ b/bilibili/aceld/IM-System/client/client.go @@ -4,7 +4,9 @@ package main import ( "flag" "fmt" + "io" "net" + "os" ) type Client struct { @@ -51,6 +53,19 @@ func (client *Client) menu() bool { } } +// client的更新用户名接口 +func (client *Client) UpdateName() bool { + fmt.Println(">>>>>> 请输入新用户名:") + fmt.Scanln(&client.Name) + sendMsg := "rename|" + client.Name + "\n" + _, err := client.conn.Write([]byte(sendMsg)) + if err != nil { + fmt.Println("conn.Write err:", err) + return false + } + return true +} + func (client *Client) Run() { for client.flag != 0 { for !client.menu() { @@ -67,10 +82,17 @@ func (client *Client) Run() { case 3: // 更新用户名 fmt.Println("已选择更新用户名模式...") + client.UpdateName() } } } +// 处理server回应的消息(直接显示到标准输出) +func (client *Client) DealResponse() { + // 一旦client.conn有数据就直接copy到stdout标准输出上,永久阻塞监听 + io.Copy(os.Stdout, client.conn) +} + // 定义全局变量 var serverIp string @@ -95,6 +117,9 @@ func main() { } fmt.Println(">>>>>> 连接服务器成功……") + // 单独开启一个goroutine去处理server发送的消息 + go client.DealResponse() + // for { // time.Sleep(1 * time.Second) // }