Make a working tool.

Next step: capture a load of JSON files for the mock server.
This commit is contained in:
Sacha Ligthert 2024-01-21 17:30:28 +01:00
parent af1c0f3885
commit 5979469caa
3 changed files with 200092 additions and 0 deletions

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module gitea.ligthert.net/golang/dcsw_server_map/mock_listener
go 1.21.6

91
main.go Normal file
View File

@ -0,0 +1,91 @@
package main
import (
"errors"
"flag"
"io"
"log"
"net/http"
"os"
"time"
)
type Core struct {
cache string
logger *log.Logger
http_port string
folder string
delay int
}
func main() {
var core Core
core.logger = log.New(os.Stdout, "[MOCK] ", log.Ldate|log.Ltime)
var flagHTTP = flag.String("http", ":8888", "Listen [addres]:port for the HTTP listener.")
var flagFolder = flag.String("folder", "slides", "Folder to iterate through a series of .json files.")
var flagDelay = flag.Int("delay", 5, "Delay in seconds before moving to the next file in a series.")
flag.Parse()
core.http_port = *flagHTTP
core.folder = *flagFolder
core.delay = *flagDelay
// Kickstart the logic
core.logger.Println("Starting Logic Controller (LC) in the background.")
go core.logicController()
// Start the HTTP server
core.logger.Println("Starting HTTP listener on", core.http_port)
http.HandleFunc("/", core.serveSlides)
err := http.ListenAndServe(core.http_port, nil)
if errors.Is(err, http.ErrServerClosed) {
core.logger.Println("server closed.")
} else if err != nil {
core.logger.Printf("error starting server: %s\n", err)
os.Exit(1)
}
}
func (core *Core) logicController() {
// Find all the json files and chuck 'em in a slice
var files []string
entries, err := os.ReadDir(core.folder)
if err != nil {
log.Fatal(err)
}
for _, e := range entries {
if string(e.Name())[len(e.Name())-5:] == ".json" {
files = append(files, e.Name())
}
}
core.logger.Println("(LC) processing the following files", files)
/// Periodically change contents
for {
for _, file := range files {
contents, err := os.ReadFile(core.folder + "/" + file)
core.check(err)
core.cache = string(contents)
time.Sleep(time.Duration(core.delay) * time.Second)
}
}
}
func (core *Core) serveSlides(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Access-Control-Allow-Origin", "*")
io.WriteString(w, string(core.cache)+"\n") // Have \n at the end or not?
}
func (core *Core) check(e error) {
if e != nil {
panic(e)
}
}

199998
slides/filler.txt Normal file

File diff suppressed because it is too large Load Diff