personal-website/iternal/controllers/CCTweakedController.go
2025-01-28 19:07:09 +03:00

81 lines
1.8 KiB
Go

// Controller for minecraft mod CC:Tweaked
// I decided to make it so I and my friend can create some bizzare stuff in minectaft :D
// It turned out pretty well and was the first controller which I tested.
package controllers
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"github.com/kaptinlin/jsonrepair"
)
// Json unmarshalled object from website.
type Message struct {
Content string `json:"content"`
Msg_type int `json:"msg_type"`
}
var message_queue = []Message{}
func preprocess_message(r *http.Request) []byte {
message_bytes, _ := io.ReadAll(r.Body)
message_body := string(message_bytes)
repaired, err := jsonrepair.JSONRepair(message_body)
if err != nil {
log.Printf("Failed to fix JSON: %v", err)
}
repaired_bytes := []byte(repaired)
return repaired_bytes
}
func decodeMessage(r *http.Request) (Message, error) {
var messageRC Message
processed_message := preprocess_message(r)
err := json.Unmarshal(processed_message, &messageRC)
if err != nil {
log.Println(err)
return Message{}, err
}
return messageRC, nil
}
// Garbage collection for messages.
func clearQueue() {
if len(message_queue) <= 1 {
return
}
message_queue = message_queue[1:]
}
func PostSendMessage(w http.ResponseWriter, r *http.Request) {
decoded_message, err := decodeMessage(r)
if err != nil {
w.WriteHeader(400)
fmt.Fprintf(w, "Failed to decode message %v", err)
log.Printf("Failed to decode message %v", err)
return
}
message_queue = append(message_queue, decoded_message)
clearQueue()
}
func GetMessage(w http.ResponseWriter, r *http.Request) {
w.Header().Set("content-type", "application/json")
if len(message_queue) == 0 {
message_queue = append(message_queue, Message{"no message accepted yet", 404})
}
fmt.Fprintln(w, message_queue[0])
}