]> git.scottworley.com Git - reliable-chat/blobdiff - server/server.go
Use XMLHttpRequest POST to send messages
[reliable-chat] / server / server.go
index adbbf8475003123e525047bb101d1730c904adc8..8dce69be6d77cfbbae9d73e9d96bfac4f9215445 100644 (file)
@@ -28,12 +28,14 @@ import "time"
 
 var port = flag.Int("port", 21059, "Port to listen on")
 var localaddress = flag.String("localaddress", "", "Local address to bind to")
+var max_messages = flag.Int("maxmessages", 1000, "Maximum number of messages to retain")
 
-var frame_count = expvar.NewInt("frame_count")
+var start_time = expvar.NewInt("start_time")
 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")
+var drop_due_to_limit_count = expvar.NewInt("drop_due_to_limit_count")
 
 type Message struct {
        Time time.Time
@@ -56,7 +58,6 @@ type Store struct {
 func manage_store(store Store) {
        messages := list.New()
        message_count := 0
-       max_messages := 1000
        waiting := list.New()
 main:
        for {
@@ -73,10 +74,11 @@ main:
                        }
                        waiting.Init()
                        messages.PushBack(new_message)
-                       if message_count < max_messages {
+                       if message_count < *max_messages {
                                message_count++
                        } else {
                                messages.Remove(messages.Front())
+                               drop_due_to_limit_count.Add(1)
                        }
                case request, ok := <-store.Get:
                        if !ok {
@@ -114,49 +116,6 @@ func start_store() Store {
        return store
 }
 
-const frame_html = `<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <script type="text/javascript"><!--//--><![CDATA[//><!--
-  var since;
-  window.parent.postMessage('[{"Time":"2000-01-01T00:00:00.000000-00:00","ID":"/frame deprecation warning","Text":"*** You are using an old version of the client.  Please upgrade."}]', "*");
-  function go() {
-   var delay = 10000;
-   var xhr = new XMLHttpRequest();
-   xhr.onreadystatechange = function() {
-    if (this.readyState == this.DONE) {
-     if (this.status == 200) {
-      var rtxt = this.responseText;
-      if (rtxt != null) {
-       var r = JSON.parse(rtxt);
-       if (r != null) {
-        window.parent.postMessage(rtxt, "*");
-        delay = 40;
-        if (r.length >= 1 && "Time" in r[r.length-1]) {
-         since = r[r.length-1]["Time"];
-        }
-       }
-      }
-     }
-     window.setTimeout(go, delay);
-    }
-   }
-   var uri = "/fetch";
-   if (since) {
-    uri += '?since="' + since + '"';
-   }
-   xhr.open("GET", uri);
-   xhr.send();
-  }
-  //--><!]]></script>
-</head>
-<body onload="go()">
-</body>
-</html>
-`
-
 const robots_txt = `User-agent: *
 Disallow: /
 `
@@ -195,13 +154,8 @@ func start_server(store Store) {
                        r.FormValue("text")}
        })
 
-       http.HandleFunc("/frame", func(w http.ResponseWriter, r *http.Request) {
-               frame_count.Add(1)
-               w.Write([]byte(frame_html));
-       })
-
        http.HandleFunc("/robots.txt", func(w http.ResponseWriter, r *http.Request) {
-               w.Write([]byte(robots_txt));
+               w.Write([]byte(robots_txt))
        })
 
        log.Fatal(http.ListenAndServe(*localaddress+":"+strconv.Itoa(*port), nil))
@@ -209,6 +163,7 @@ func start_server(store Store) {
 
 func main() {
        flag.Parse()
+       start_time.Set(time.Now().UnixNano())
        store := start_store()
        start_server(store)
 }