diff options
author | ryo <ryo@nopwd.lol> | 2025-04-11 20:22:41 +0000 |
---|---|---|
committer | ryo <ryo@nopwd.lol> | 2025-04-11 20:22:41 +0000 |
commit | 8e12f4f68cc907668a0ad91b854a80f21b921071 (patch) | |
tree | f9f3dffba3fa0284fbef050367cdc6e4ffbc0f42 /server.go |
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/server.go b/server.go new file mode 100644 index 0000000..56cd582 --- /dev/null +++ b/server.go @@ -0,0 +1,89 @@ +package main + +import ( + "bufio" + "fmt" + "net" + "strings" +) + +var ( + clients = make(map[net.Conn]string) + chats [20]string + chats_i int +) + +func broadcast(message string) { + for conn, _ := range clients { + fmt.Fprint(conn, message) + } +} + +func handleCommand(conn net.Conn, message string) { + parts := strings.Split(message, " ") + command := parts[0] + fmt.Println("command >>", command) + switch command { + case "login": + name := parts[1] + fmt.Printf("%v now is %v\n", clients[conn], name) + clients[conn] = name + fmt.Fprintf(conn, "!%v\n", name) + default: + fmt.Println("Command not found") + } +} + +func handleConnection(conn net.Conn) { + defer conn.Close() + + clients[conn] = conn.RemoteAddr().String() + fmt.Println("Client connected: ", clients[conn]) + fmt.Fprintln(conn, "127.0.0.1:7654=Hello everyone from server") + for i := 0; i < chats_i; i++ { + fmt.Fprint(conn, chats[i]) + } + + for { + message, error := bufio.NewReader(conn).ReadString('\n') + if error != nil { + break + } + if message[0] == '/' { + handleCommand(conn, message[1:len(message)-1]) + } else { + chats[chats_i] = clients[conn] + "=" + message + fmt.Print(">> ", chats[chats_i]) + broadcast(chats[chats_i]) + chats_i = chats_i + 1 + if chats_i >= len(chats) { + chats_i = 0 + } + } + } + + fmt.Println("Client disconnected:", clients[conn]) + delete(clients, conn) +} + +func main() { + listener, err := net.Listen("tcp", "0.0.0.0:7654") + if err != nil { + fmt.Println("Error starting server:", err) + return + } + defer listener.Close() + + fmt.Println("Chat server started on 0.0.0.0:7654") + + chats_i = 0 + for { + conn, err := listener.Accept() + if err != nil { + fmt.Println("Error accepting connection:", err) + continue + } + + go handleConnection(conn) + } +} |