Sudoku Funpark Clustered Services
|
|
1 年之前 | |
|---|---|---|
| client | 1 年之前 | |
| flags | 1 年之前 | |
| server | 1 年之前 | |
| vars | 1 年之前 | |
| .gitignore | 1 年之前 | |
| .pre-commit-config.yaml | 1 年之前 | |
| LICENSE | 1 年之前 | |
| README.md | 1 年之前 | |
| Taskfile.yml | 1 年之前 | |
| go.mod | 1 年之前 | |
| go.sum | 1 年之前 | |
| main.go | 1 年之前 |
Sudoku-Funpark Cluster Software: same as Sudoku-funpark, but networked.
While network and transport is done via WebSocket, traffic is sent using Python. ( 🤔 not sure if this is the smartest idea, as Golang isn't really that strong with JSON. 🫠 )
Agent => Manager:
Manager => Agent:
For ease of programming I would like start of easy and use ;-separated string to push values between manager and its agents. In this setup the format is predefined, and parsing will be based on the first field after the string is split on ;.
I still have the impression that Go and JSON is hard to do as the rigidness of Go does not go well with the free spirited nature of JSON. I might revise this in the future.
I intend use golang/sudoku-funpark for the code to determine workload and calculate the puzzles that need to be solved. And while this is all modular, it unfortunately isn't flexible enough to actually use it in the tool (or I am not trying hard enough).
Outputter Controller Export Flags Solver
controller := controller.Controller{}
outp := outputter.Outputter{}
export := export.Export{Controller: &controller}
flags := flags.Flags{Controller: &controller}
solver := solver.Solver{Controller: &controller, Outp: &outp}
Both the manager and the agent will have similar setups:
*websocket.Conn is stored in types.go.readProcessor() which in turn parses the message, and in turn does the appropriate logic (read, calling go routine/functions)This does however presents me with a problem. Since all communication is reactive, state-less, and all over the same connection; so tracking things is a bit hard. And this is something for maybe the next phase. So for now, reactive content only. This said, I need figure out how on earth I can prevent an agent from taking two jobs at the same time. I guess I will need to build in some agent state tracking for this.