aboutsummaryrefslogtreecommitdiffhomepage
path: root/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server.go')
-rw-r--r--server.go89
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)
+ }
+}