Problem Statement
I'm writing a C# console program that takes binary data coming in through Serial COM1, converting each byte into ASCII hex, and then outputting those HEX characters out through Serial COM2.
I would like this program to run in the command shell continuously but also exit gracefully (so that system resources like the COM ports are freed). The catch is that there is no time-out on either inbound/outbound serial data stream (I'd like for the program to run for weeks-months at a time). So how would such a program exit when the user wants it to quit?
The ability to connect to and disconnect from a serial communication session is a standard feature of most terminal emulators and I wanted to know how developers implement such a solution.
Initial Solutions
- Have the program read from a text file and recognize commands like "quit" from it. The user simply creates a text file, writes "quit" and the next time the application gets around to reading the file, it knows to quit! I don't like this solution because I'll be chided for creating an archaic UI.
- Have the application read from a third COM port and process the data stream as commands. It quits when it sees "quit" in the ReadBuffer.
- Create a second program (process) that invokes the above program as a process. Then, have the second process handle user i/o from stdin in another console window. When the user enters "quit", the second process should kill the first process. (I've never worked with multiple processes so I don't know what function calls or libraries to look at.
- Make the program multi-threaded. Have a thread of execution for reading in bytes, another to do the conversion, another to write out the converted, and another to handle input from stdin.
Comments
I'm not sure what solution to invest time in. Currently, I'm looking into (4).