aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/client.c (follow)
Commit message (Collapse)AuthorAge
* switch to egor@tensin.nameEgor Tensin2023-12-12
|
* implement a command to list runsEgor Tensin2023-11-15
|
* client: print the server responseEgor Tensin2023-11-12
|
* refactoringEgor Tensin2023-11-12
|
* switch to JSON-RPC as message formatEgor Tensin2023-07-18
| | | | | | Instead of the weird `struct msg` I had, I switched to the JSON-RPC format. It's basically the same, but has a well-defined semantics in case of errors.
* test: add some basic command-line usage testsEgor Tensin2023-07-07
|
* sanitize #include-sEgor Tensin2023-06-13
|
* msg: rework some APIsEgor Tensin2023-06-11
|
* msg: add functions for one-off communicationEgor Tensin2023-05-14
|
* fix unnecessary #include-sEgor Tensin2023-05-13
|
* best practices & coding style fixesEgor Tensin2023-05-13
| | | | | | | | * I don't really need to declare all variables at the top of the function anymore. * Default-initialize variables more. * Don't set the output parameter until the object is completely constructed.
* add command module to handle request-response communicationsEgor Tensin2023-05-13
|
* make struct client opaqueEgor Tensin2023-04-29
|
* add copyright noticesEgor Tensin2022-12-02
|
* log: refactoringEgor Tensin2022-09-08
|
* holy crap, it actually kinda works nowEgor Tensin2022-08-28
| | | | | | | | | | | | | | | | | | | | | | | Previously, I had a stupid system where I would create a thread after every accept(), and put worker descriptors in a queue. A special "scheduler" thread would then pick them out, and give out jobs to complete. The problem was, of course, I couldn't conveniently poll job status from workers. I thought about using poll(), but that turned out to be a horribly complicated API. How do I deal with partial reads, for example? I don't honestly know. Then it hit me that I could just use the threads that handle accept()ed connections as "worker threads", which would synchronously schedule jobs and wait for them to complete. This solves every problem and removes the need for a lot of inter-thread synchronization magic. It even works now, holy crap! You can launch and terminate workers at will, and they will pick up new jobs automatically. As a side not, msg_recv_and_handle turned out to be too limiting and complicated for me, so I got rid of that, and do normal msg_recv/msg_send calls.
* add check_errno macroEgor Tensin2022-08-26
|
* msg: refactoringEgor Tensin2022-08-25
|
* net: rework APIEgor Tensin2022-08-25
| | | | | | | | | | First, rename all API functions so that they start with net_. Second, abstract the basic TCP server functionality into tcp_server.c. This includes reworking net_accept so that it's a simple blocking operation, and putting the callback stuff to tcp_server.c. Also, the server now uses detached threads instead of fork(), since I want connection handlers to share memory.
* cmd -> msgEgor Tensin2022-08-23
| | | | This I feel better conveys the meaning.
* add some codeEgor Tensin2022-08-23
A basic client-server app, the client sends commands as an array of strings. Hopefully I didn't mess up, and hopefully it'll be useful.