]> git.scottworley.com Git - reliable-chat/blobdiff - server/server.go
Send messages with <img src="...">
[reliable-chat] / server / server.go
index 7572447610372c8dd45c6c6dc063924df36bcecf..8ce96787ac89658490ab943dc2b7710db4a38a14 100644 (file)
@@ -2,12 +2,23 @@ package main
 
 import "container/list"
 import "encoding/json"
+import "expvar"
+import "flag"
 import "log"
 import "net/http"
+import "strconv"
 import "time"
 
+var port = flag.Int("port", 21059, "Port to listen on")
+
+var speak_count = expvar.NewInt("speak_count")
+var fetch_count = expvar.NewInt("fetch_count")
+var fetch_wait_count = expvar.NewInt("fetch_wait_count")
+var fetch_wake_count = expvar.NewInt("fetch_wake_count")
+
 type Message struct {
        Time time.Time
+       ID   string
        Text string
 }
 
@@ -35,12 +46,14 @@ main:
                        if !ok {
                                break main
                        }
-                       messages.PushBack(new_message)
+                       speak_count.Add(1)
                        for waiter := waiting.Front(); waiter != nil; waiter = waiter.Next() {
                                waiter.Value.(*StoreRequest).Messages <- []Message{*new_message}
                                close(waiter.Value.(*StoreRequest).Messages)
+                               fetch_wake_count.Add(1)
                        }
                        waiting.Init()
+                       messages.PushBack(new_message)
                        if message_count < max_messages {
                                message_count++
                        } else {
@@ -50,8 +63,10 @@ main:
                        if !ok {
                                break main
                        }
+                       fetch_count.Add(1)
                        if messages.Back() == nil || !request.StartTime.Before(messages.Back().Value.(*Message).Time) {
                                waiting.PushBack(request)
+                               fetch_wait_count.Add(1)
                        } else {
                                start := messages.Back()
                                response_size := 1
@@ -107,10 +122,13 @@ func start_server(store Store) {
        })
 
        http.HandleFunc("/speak", func(w http.ResponseWriter, r *http.Request) {
-               store.Add <- &Message{time.Now(), r.FormValue("text")}
+               store.Add <- &Message{
+                       time.Now(),
+                       r.FormValue("id"),
+                       r.FormValue("text")}
        })
 
-       log.Fatal(http.ListenAndServe(":8080", nil))
+       log.Fatal(http.ListenAndServe(":"+strconv.Itoa(*port), nil))
 }
 
 func main() {