Make a working tool.
Next step: capture a load of JSON files for the mock server.
This commit is contained in:
parent
af1c0f3885
commit
5979469caa
3
go.mod
Normal file
3
go.mod
Normal file
@ -0,0 +1,3 @@
|
||||
module gitea.ligthert.net/golang/dcsw_server_map/mock_listener
|
||||
|
||||
go 1.21.6
|
91
main.go
Normal file
91
main.go
Normal 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
199998
slides/filler.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user