1
0
mirror of https://github.com/MADTeacher/go_basics.git synced 2025-11-23 21:34:47 +02:00
Files
go_basics/part_8/8.3/tcp-chat/client/client.go
Stanislav Chernyshev d4e7211d1d Глава 8
Допричесать игру
2025-06-22 21:04:23 +03:00

78 lines
1.8 KiB
Go

package client
import (
"bufio"
"fmt"
"io"
"log"
"net"
"os"
"strings"
"sync"
)
var waitingGr sync.WaitGroup
func checkErr(err error) {
if err != nil {
log.Fatal(err)
}
}
func sendMessage(connection net.Conn, waitingGr *sync.WaitGroup) {
defer waitingGr.Done()
for {
reader := bufio.NewReader(os.Stdin) // считываем введенное сообщение
text, _ := reader.ReadString('\n')
if strings.TrimSuffix(strings.TrimSpace(text), "\r\n") == "/stop" {
// завершение работы клиента
break
} else {
_, err := connection.Write([]byte(text))
checkErr(err)
}
}
}
func receiveMessage(connection net.Conn, waitingGr *sync.WaitGroup) {
defer waitingGr.Done()
for {
// ждем сообщение от сервера и считываем его
message, err := bufio.NewReader(connection).ReadString('\n')
if err == io.EOF {
fmt.Println("Connection close!")
break
} else if err != nil {
fmt.Println(err.Error())
break
}
message = message[:len(message)-1] // обрезаем символ перевода на следующую строку
fmt.Println(string(message))
}
}
func RunClient(port int) {
// запускает реализацию клиента TCP и соединяет вас с нужным TCP-сервером
connection, err := net.Dial("tcp", fmt.Sprintf("localhost:%d", port))
checkErr(err)
fmt.Printf("The TCP server is %s\n", connection.RemoteAddr().String())
defer connection.Close()
waitingGr.Add(1)
fmt.Println("Enter name: ")
temp := bufio.NewReader(os.Stdin)
userName, _ := temp.ReadString('\n')
_, err = connection.Write([]byte(userName))
checkErr(err)
go sendMessage(connection, &waitingGr)
go receiveMessage(connection, &waitingGr)
waitingGr.Wait()
}