Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "net"
- "log"
- "bufio"
- "fmt"
- )
- func main() {
- ln, err := net.Listen("tcp", "192.168.1.254:8989")
- if err != nil {
- log.Println(err.Error())
- }
- log.Printf("Start pooling %v", ln)
- aconns := make(map[net.Conn]int)
- conns := make(chan net.Conn)
- dconns := make(chan net.Conn)
- msgs := make(chan string)
- names := make(map[net.Conn]string)
- i := 0
- go func() {
- for {
- conn, err := ln.Accept()
- if err != nil {
- log.Println(err.Error())
- }
- conn.Write([]byte("Enter your name\n"))
- rd := bufio.NewReader(conn)
- name, err := rd.ReadString('\n')
- if err != nil {
- conn.Write([]byte(err.Error()))
- return
- }
- conn.Write([]byte(fmt.Sprintf("Hello %v", name)))
- names[conn] = name
- conns <- conn
- }
- }()
- for {
- select {
- case conn := <- conns:
- aconns[conn] = i
- name := names[conn]
- log.Printf("Client %v %v connected", i, name)
- i++
- go func(conn net.Conn, i int) {
- rd := bufio.NewReader(conn)
- for {
- m, err := rd.ReadString('\n')
- if err != nil {
- break
- }
- msgs <- fmt.Sprintf("Client %v: %v", i, m)
- }
- dconns <- conn
- }(conn, i)
- case msg := <- msgs:
- for conn := range aconns {
- conn.Write([]byte(msg))
- }
- case dconn := <- dconns:
- log.Printf("Client %v left the chat", aconns[dconn])
- delete(aconns, dconn)
- delete(names, dconn)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement