Skip to content

Add interactive ClientConsole example to Python, C# and C SDKs - #43

Merged
nevstop merged 2 commits into
Dev_2026Q2from
copilot/add-client-console-programs
Apr 28, 2026
Merged

Add interactive ClientConsole example to Python, C# and C SDKs#43
nevstop merged 2 commits into
Dev_2026Q2from
copilot/add-client-console-programs

Conversation

CopilotAI commented Apr 28, 2026

Copy link
Copy Markdown
Contributor
  • Add SDK/python/examples/client_console.py (Python SDK)
  • Add SDK/csharp/examples/ClientConsole/{ClientConsole.csproj,Program.cs} (C# SDK) and register in CsmTcpRouter.sln
  • Add SDK/c/examples/client_console.c (C SDK) and register in SDK/c/CMakeLists.txt
  • All three implement an identical REPL: same csm> prompt, same command set, same output formatting
  • Validate port CLI argument in Python and C# (matching the C example) — print Error: invalid port '<value>' and exit 1 on non-integer or out-of-range input

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an interactive clientConsole REPL example to the Python, C#, and C SDKs to provide a consistent, cross-language console for connecting to a CSM-TCP-Router server and issuing common commands.

Changes:

  • Added new interactive REPL examples for Python (client_console.py), C# (examples/ClientConsole), and C (client_console.c).
  • Registered the new C# example project in CsmTcpRouter.sln.
  • Added a new C example target (client_console) to the C SDK CMake build.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
SDK/python/examples/client_console.pyNew Python REPL console example (stdin-driven) with unified commands/output.
SDK/csharp/examples/ClientConsole/Program.csNew C# REPL console implementation using the C# SDK APIs.
SDK/csharp/examples/ClientConsole/ClientConsole.csprojNew C# example project definition referencing the SDK project.
SDK/csharp/CsmTcpRouter.slnAdds the new C# example project to the solution and build configs.
SDK/c/examples/client_console.cNew C REPL console example using the C SDK APIs and callbacks.
SDK/c/CMakeLists.txtAdds client_console executable target under CSM_BUILD_EXAMPLES.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.


def main(argv: list[str]) -> int:
host = argv[1] if len(argv) > 1 else DEFAULT_HOST
port = int(argv[2]) if len(argv) > 2 else DEFAULT_PORT

CopilotAIApr 28, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

port = int(argv[2]) will raise ValueError and abort the program if the user passes a non-integer port (e.g. python client_console.py localhost abc). Consider catching this and printing an Error: invalid port '<value>' message (and returning nonzero), similar to the C example’s validation.

Suggested change
port=int(argv[2]) iflen(argv) >2elseDEFAULT_PORT
iflen(argv) >2:
try:
port=int(argv[2])
exceptValueError:
print(f"Error: invalid port '{argv[2]}'")
return1
else:
port=DEFAULT_PORT

Copilot uses AI. Check for mistakes.
public static int Main(string[] args)
{
string host = args.Length > 0 ? args[0] : DefaultHost;
int port = args.Length > 1 ? int.Parse(args[1]) : DefaultPort;

CopilotAIApr 28, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

int.Parse(args[1]) will throw FormatException/OverflowException on invalid input and terminate the console. Consider using int.TryParse (and range-checking 1–65535) to print a friendly Error: invalid port '<value>' message and exit cleanly.

Suggested change
intport=args.Length>1?int.Parse(args[1]):DefaultPort;
intport=DefaultPort;
if(args.Length>1)
{
if(!int.TryParse(args[1],outport)||port<1||port>65535)
{
Console.WriteLine($"Error: invalid port '{args[1]}'");
return1;
}
}

Copilot uses AI. Check for mistakes.
@nevstop

Copy link
Copy Markdown
Contributor

@copilot apply changes based on the comments in this thread

CopilotAI commented Apr 28, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot apply changes based on the comments in this thread

Applied port validation in both the Python and C# client_console examples — non-integer or out-of-range values now print Error: invalid port '<value>' and exit 1, matching the C example. Commit 54470c4.

CopilotAI requested a review from nevstopApril 28, 2026 10:13
@nevstop
nevstop marked this pull request as ready for review April 28, 2026 10:16
@nevstop
nevstop merged commit 0c4fb08 into Dev_2026Q2Apr 28, 2026
@nevstop
nevstop deleted the copilot/add-client-console-programs branch April 28, 2026 10:16
nevstop added a commit that referenced this pull request Jul 14, 2026
* Refactor bilingual README for clarity and replace Mermaid diagrams with Excalidraw-based PNG images (#29)
* docs: rewrite bilingual README with mermaid diagrams
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/457dc57e-fd6d-4087-a604-3a7a4dd68b7b
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: replace mermaid diagrams with static PNG images
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/a92684df-d1ef-4e7f-801e-473ee3d2911d
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: replace mermaid with png diagrams and add excalidraw sources
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/a92684df-d1ef-4e7f-801e-473ee3d2911d
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: align client diagram alt text with sequence content
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/a92684df-d1ef-4e7f-801e-473ee3d2911d
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: normalize client diagram naming and alt text
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/a92684df-d1ef-4e7f-801e-473ee3d2911d
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: unify client diagram alt text naming
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/a92684df-d1ef-4e7f-801e-473ee3d2911d
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: improve diagram alt text accessibility in both READMEs
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/a92684df-d1ef-4e7f-801e-473ee3d2911d
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Convert `.doc/CSM-TCP-Router.drawio` to Excalidraw source and synced PNG export (#30)
* docs: add excalidraw and png converted from drawio
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/8747d072-0055-4877-a383-891476e8e333
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: fix application spelling in converted diagram
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/8747d072-0055-4877-a383-891476e8e333
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* 17 python sdk (#32)
* feat: add Python pip-publishable SDK for CSM-TCP-Router (#31)
* feat: add Python pip-publishable SDK for CSM-TCP-Router
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/4a1ee665-7464-4bd0-8898-0725daef43d5
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* fix: add least-privilege permissions to CI workflow jobs
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/4a1ee665-7464-4bd0-8898-0725daef43d5
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* feat: add asyncio client, Chinese README, and TestPyPI CI stage (v0.2.0)
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/93afe5c4-c917-4b9b-a347-189efb3bf4db
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* fix: address all PR review comments (shared _errors, socket leak, locks, disconnect sentinels, isawaitable, changelog)
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/b0917f8e-c50c-4a63-ae30-a1c245a6d3d7
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Add bilingual VI API reference docs for CSM-TCP-Router (Server + Client) (#35)
* Initial plan
* docs: add bilingual VI API documentation for CSM-TCP-Router
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/cacb955d-6c38-4fc7-b30d-9381fbbd06e1
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: move VI API docs under src and align reference format
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/117da425-df26-4ecc-a8c4-ab0e98412e50
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* docs: restore compatibility notes in status API sections
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/117da425-df26-4ecc-a8c4-ab0e98412e50
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
* update PythonClientAPI/*
* Consolidate Python SDK into single-file `csm_tcp_router_client` module and release as v0.3.0 (#37)
* Consolidate Python SDK into single-file csm_tcp_router_client module
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/ffc74aa4-b55d-45b4-b066-749d1db8c176
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Bump SDK to 0.3.0 and fix workflow paths so publish jobs trigger
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/f2eec384-ae45-4817-bcb3-1f990db4954b
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Add C# csm-tcp-router-client SDK (#38)
* Initial plan
* Add C# csm-tcp-router-client SDK (single-file), VS solution, xUnit tests, example, NuGet packaging, and GitHub Actions workflow
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/1c9d260f-6983-4c60-9d7a-f07538723b70
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Address review: deterministic closed-port helper, ManualResetEventSlim in unsubscribe test, observe WaitForServerAsync connect task, force disconnect on RESP/CMD_RESP timeout
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/a52165ab-7829-42b0-91f9-e4ba84e0b6b9
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Add C csm-tcp-router-client SDK (multi-platform, VS2026, CMake, tests) (#40)
* Add C csm-tcp-router-client SDK with VS2026 + CMake + tests
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/ea6c42b2-b6f8-4ebe-8438-786601832ef5
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Address PR review comments on the C SDK
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/de04612d-484c-4905-9c04-06c451a01e15
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Drop redundant g_wsa_lock_inited; route cleanup through InitOnceExecuteOnce
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/de04612d-484c-4905-9c04-06c451a01e15
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Fix INADDR_LOOPBACK undeclared on macOS in mock_server.c (#41)
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/eab9769d-1260-4715-8d72-1e3241719ef1
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* 将 SDK/ 下所有代码注释翻译为中文 (#42)
* translate: convert all C SDK comments from English to Chinese
Translated all code comments in 11 C SDK files from English to Chinese,
preserving all code logic, variable names, function names, string literals,
Doxygen tags (@PARAM, @return, etc.) and technical proper names (TCP, CSM,
WSA, POSIX, BSD, Win32, Winsock2, pthreads, CMake, NUL, DLL, etc.).
Files translated:
- SDK/c/include/csm_tcp_router_client.h
- SDK/c/src/csm_tcp_router_client.c
- SDK/c/examples/basic_usage.c
- SDK/c/examples/subscribe_status.c
- SDK/c/tests/test_harness.h
- SDK/c/tests/mock_server.h
- SDK/c/tests/mock_server.c
- SDK/c/tests/test_main.c
- SDK/c/tests/test_client.c
- SDK/c/tests/test_protocol.c
- SDK/c/tests/test_integration.c
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* translate: convert all C# SDK comments from English to Chinese
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* translate: convert all Python SDK comments from English to Chinese
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* translate: convert all Python SDK comments from English to Chinese (partial)
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/097602f2-f319-49ea-84a2-3c8a30aa0915
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Add interactive ClientConsole example to Python, C# and C SDKs (#43)
* Add interactive ClientConsole example to Python, C# and C SDKs
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/ca3628f9-8283-448f-8789-d860c873c1dc
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* Validate port argument in Python and C# ClientConsole examples
Agent-Logs-Url: https://github.com/NEVSTOP-LAB/CSM-TCP-Router-App/sessions/1a565ac6-daf6-4291-8c0c-b3444c37d8ba
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <8196752+nevstop@users.noreply.github.com>
* update deps
* 重命名example
* backup code
* mass compile to trigger build
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nevstop <nevstop@NEVSTOP-LAB>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@nevstop