annotate gara/main.go @ 71:75de5903355c

Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
author June Park <parkjune1995@gmail.com>
date Sun, 28 Dec 2025 20:34:22 -0800
parents c2706ffb442b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
1 package main
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
2
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
3 import (
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
4 "fmt"
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
5 "bytes"
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
6 "net"
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
7 )
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
8
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
9 type Client struct {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
10 name string
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
11 conn net.Conn
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
12 message []byte
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
13 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
14
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
15 var clients map[string]Client = make(map[string]Client)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
16 var allowedCharacters = map[byte]bool{
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
17 'a': true, 'b': true, 'c': true, 'd': true, 'e': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
18 'f': true, 'g': true, 'h': true, 'i': true, 'j': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
19 'k': true, 'l': true, 'm': true, 'n': true, 'o': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
20 'p': true, 'q': true, 'r': true, 's': true, 't': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
21 'u': true, 'v': true, 'w': true, 'x': true, 'y': true, 'z': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
22 'A': true, 'B': true, 'C': true, 'D': true, 'E': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
23 'F': true, 'G': true, 'H': true, 'I': true, 'J': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
24 'K': true, 'L': true, 'M': true, 'N': true, 'O': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
25 'P': true, 'Q': true, 'R': true, 'S': true, 'T': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
26 'U': true, 'V': true, 'W': true, 'X': true, 'Y': true, 'Z': true,
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
27 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
28
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
29 func IsChacterAllowed(chars []byte) bool {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
30 for _, b := range chars {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
31 if !allowedCharacters[b] {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
32 return false
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
33 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
34 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
35 return true
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
36 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
37
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
38 func ResetClient(client Client) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
39 ResetClientMessage(client)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
40 delete(clients, client.conn.RemoteAddr().String())
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
41 client.conn.Close()
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
42 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
43
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
44 func ResetClientMessage(client Client) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
45 for i := range client.message {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
46 client.message[i] = 0
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
47 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
48 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
49
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
50 func Loggers(value string) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
51 fmt.Println(value)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
52 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
53
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
54 func SendString(client Client, value string) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
55 fmt.Println("Notifying User: ", client.name)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
56 client.conn.Write(([]byte)(value+"\n"))
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
57 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
58
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59 func SendToAll(currentClient Client) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
60 for key, client := range clients {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
61 if currentClient.conn.RemoteAddr().String() == key {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
62 continue
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
63 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64 formattedMessage := fmt.Sprintf("%v: %v", currentClient.name, (string)(currentClient.message))
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
65 SendString(client, formattedMessage)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
66 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
67 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
68
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
69 func HandleConnection(conn net.Conn) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
70 client := Client{name: "unknown", conn: conn, message: make([]byte, 100)}
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
71 defer ResetClient(client)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
72
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
73 SendString(client, "Hello good sir. What is your name?(less than 100 character and no special characters)\n")
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
74 for {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
75 _, err := conn.Read(client.message)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
76 if err != nil {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
77 SendString(client, "Something went wrong. Try again.")
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
78 continue
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
79 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
80
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
81 for i := 0; i < len(client.message) - 1; i++ {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
82 if (string)(client.message[i:i+2]) == "\r\n" {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
83 client.name = (string)(client.message[:i])
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
84 break;
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
85 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
86 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
87
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
88 if !IsChacterAllowed(([]byte)(client.name)) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
89 SendString(client, "Only allow alphabets.")
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
90 continue
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
91 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
92 if client.name[0] == (byte)('\r') {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
93 continue
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
94 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
95 ResetClientMessage(client)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
96 break
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
97 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
98
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
99 clients[client.conn.RemoteAddr().String()] = client
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
100
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
101 // Hnadle all messages.
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
102 for {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
103 err_n := 0
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
104
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
105 if err_n > 10 {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
106 break;
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
107 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
108
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
109 _, err := conn.Read(client.message)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
110 if err != nil {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
111 Loggers("Something went wrong")
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
112 err_n += 1
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
113 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
114 if bytes.Equal(([]byte)("close"), client.message[:5]) {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
115 break
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
116 } else {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
117 fmt.Println("Working....")
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
118 SendToAll(client)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
119 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
120 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
121 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
122
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
123 func main() {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
124 PORT := ":4200";
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
125 server_conn, err := net.Listen("tcp", PORT)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
126 fmt.Println("Running on ", server_conn.Addr().String())
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
127
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
128 if err != nil {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
129 Loggers("Couldn't run the server")
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
130 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
131 for {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
132 conn, err := server_conn.Accept()
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
133 if err != nil {
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
134 Loggers("Couldn't accept a client")
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
135 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
136 go HandleConnection(conn)
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
137 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
138 }
c2706ffb442b [Gara] Peer to peer chat terminal app using go.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
139