learning_go/book_with_bridge/interfaces/reverb_server/main.go
2026-01-03 21:19:07 +03:00

69 lines
1022 B
Go

package main
import (
"bufio"
"fmt"
"log"
"net"
"strings"
"time"
)
func echo(c net.Conn, shout string, t time.Duration) {
for _ = range 3 {
fmt.Fprintln(c, "\t", strings.ToUpper(shout))
time.Sleep(t)
}
}
func handleConn(conn net.Conn) {
count := 1
defer fmt.Println("CLosed Connection")
defer conn.Close()
fmt.Println("Accepted connection")
ticker := time.NewTicker(2*time.Second)
input := bufio.NewScanner(conn)
select {
case <- ticker.C:
fmt.Println("TIMEOUT")
default:
fmt.Println("DEFAULT")
}
for input.Scan() {
fmt.Println("TICK")
switch input.Text() {
case "info":
fmt.Printf("INFO %d",count)
default:
count++
go func() {
defer func (){
count--
}()
echo(conn, input.Text(), 1*time.Second)
}()
}
}
}
func main() {
listener, err := net.Listen("tcp", ":9090")
if err != nil {
log.Fatalf("Error %v", err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Fatalf("Error in Accept %s", err)
}
go handleConn(conn)
}
}