]> git.scottworley.com Git - reliable-chat/blobdiff - server/server.go
Allow port to be specified. Default resonably.
[reliable-chat] / server / server.go
index bfe10669e7f0bd34368984dffbde1c7fe8adcd55..c47bfaa2f63849d89376abeac8709d2648d38b83 100644 (file)
@@ -2,10 +2,14 @@ package main
 
 import "container/list"
 import "encoding/json"
+import "flag"
 import "log"
 import "net/http"
+import "strconv"
 import "time"
 
+var port = flag.Int("port", 21059, "Port to listen on")
+
 type Message struct {
        Time time.Time
        Text string
@@ -28,9 +32,13 @@ func manage_store(store Store) {
        message_count := 0
        max_messages := 1000
        waiting := list.New()
+main:
        for {
                select {
-               case new_message := <-store.Add:
+               case new_message, ok := <-store.Add:
+                       if !ok {
+                               break main
+                       }
                        messages.PushBack(new_message)
                        for waiter := waiting.Front(); waiter != nil; waiter = waiter.Next() {
                                waiter.Value.(*StoreRequest).Messages <- []Message{*new_message}
@@ -42,7 +50,10 @@ func manage_store(store Store) {
                        } else {
                                messages.Remove(messages.Front())
                        }
-               case request := <-store.Get:
+               case request, ok := <-store.Get:
+                       if !ok {
+                               break main
+                       }
                        if messages.Back() == nil || !request.StartTime.Before(messages.Back().Value.(*Message).Time) {
                                waiting.PushBack(request)
                        } else {
@@ -103,7 +114,7 @@ func start_server(store Store) {
                store.Add <- &Message{time.Now(), r.FormValue("text")}
        })
 
-       log.Fatal(http.ListenAndServe(":8080", nil))
+       log.Fatal(http.ListenAndServe(":" + strconv.Itoa(*port), nil))
 }
 
 func main() {