Guest User

Untitled

a guest
Dec 17th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "http"
  6. "io"
  7. "strings"
  8. "time"
  9. )
  10.  
  11.  
  12. type message struct {
  13. time int64
  14. message string
  15. user string
  16. }
  17.  
  18. var messages = make([]message, 0, 1000)
  19. var lastCheck = make(map[string]int64) //when the user last checked the messages
  20.  
  21. //strips port from remote address
  22. func getUser(remoteAddr string ) string {
  23. split := strings.Split(remoteAddr, ":")
  24. user := split[0] //ip only
  25. return user
  26. }
  27.  
  28.  
  29. func saveMessage(response http.ResponseWriter, request *http.Request) {
  30. contentLength := request.ContentLength
  31. if contentLength < 1 {
  32. fmt.Fprintf(response, "Empty message stutid ass\n")
  33. return
  34. }
  35. body := make([]byte, request.ContentLength)
  36. _, err := io.ReadFull(request.Body, body) //reads request body into body
  37. if err != nil {
  38. errString := fmt.Sprintf("Error reading body: %s\n", err)
  39. fmt.Fprint(response, errString)
  40. fmt.Print(errString)
  41. }
  42. user := getUser(request.RemoteAddr)
  43. messages = append(messages, message{time.Seconds(), string(body), user})
  44. }
  45.  
  46. func getPosts(response http.ResponseWriter, request *http.Request) {
  47. curTime := time.Seconds()
  48. user := getUser(request.RemoteAddr)
  49. lastChecked, _ := lastCheck[user]
  50. for i := range messages {
  51. if messages[i].time >= lastChecked { //post is new to user
  52. fmt.Fprintln(response, messages[i].user, ":", messages[i].message)
  53. }
  54. }
  55. lastCheck[user] = curTime
  56. }
  57.  
  58. func serve(response http.ResponseWriter, request *http.Request) {
  59. fmt.Println(request.Method, "from", request.RemoteAddr)
  60. switch request.Method {
  61. case "GET":
  62. getPosts(response, request)
  63. case "POST":
  64. saveMessage(response, request)
  65. }
  66. }
  67.  
  68. func main() {
  69. http.HandleFunc("/", serve)
  70. http.ListenAndServe(":8080", nil)
  71. }
Add Comment
Please, Sign In to add comment