Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "http"
- "io"
- "strings"
- "time"
- )
- type message struct {
- time int64
- message string
- user string
- }
- var messages = make([]message, 0, 1000)
- var lastCheck = make(map[string]int64) //when the user last checked the messages
- //strips port from remote address
- func getUser(remoteAddr string ) string {
- split := strings.Split(remoteAddr, ":")
- user := split[0] //ip only
- return user
- }
- func saveMessage(response http.ResponseWriter, request *http.Request) {
- contentLength := request.ContentLength
- if contentLength < 1 {
- fmt.Fprintf(response, "Empty message stutid ass\n")
- return
- }
- body := make([]byte, request.ContentLength)
- _, err := io.ReadFull(request.Body, body) //reads request body into body
- if err != nil {
- errString := fmt.Sprintf("Error reading body: %s\n", err)
- fmt.Fprint(response, errString)
- fmt.Print(errString)
- }
- user := getUser(request.RemoteAddr)
- messages = append(messages, message{time.Seconds(), string(body), user})
- }
- func getPosts(response http.ResponseWriter, request *http.Request) {
- curTime := time.Seconds()
- user := getUser(request.RemoteAddr)
- lastChecked, _ := lastCheck[user]
- for i := range messages {
- if messages[i].time >= lastChecked { //post is new to user
- fmt.Fprintln(response, messages[i].user, ":", messages[i].message)
- }
- }
- lastCheck[user] = curTime
- }
- func serve(response http.ResponseWriter, request *http.Request) {
- fmt.Println(request.Method, "from", request.RemoteAddr)
- switch request.Method {
- case "GET":
- getPosts(response, request)
- case "POST":
- saveMessage(response, request)
- }
- }
- func main() {
- http.HandleFunc("/", serve)
- http.ListenAndServe(":8080", nil)
- }
Add Comment
Please, Sign In to add comment