{"id":18406508,"url":"https://github.com/georgiifirsov/asyncnotifications","last_synced_at":"2025-06-27T06:34:46.500Z","repository":{"id":159273931,"uuid":"228033450","full_name":"GeorgiiFirsov/AsyncNotifications","owner":"GeorgiiFirsov","description":"It is an example of client-server application system, used to show Microsoft Asynchronous RPC library in action. This code is written in C and C++14 for Windows using WinAPI.","archived":false,"fork":false,"pushed_at":"2020-07-14T19:04:33.000Z","size":236,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-29T21:05:45.030Z","etag":null,"topics":["asynchronous-programming","client-server","concurrency","concurrent-programming","cplusplus","cplusplus-14","cpp14","microsoft","microsoft-rpc","remote-procedure-call","rpc"],"latest_commit_sha":null,"homepage":"https://georgyfirsov.github.io/AsyncNotifications/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GeorgiiFirsov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-14T14:09:43.000Z","updated_at":"2023-09-17T06:32:48.000Z","dependencies_parsed_at":"2023-06-11T16:10:15.066Z","dependency_job_id":null,"html_url":"https://github.com/GeorgiiFirsov/AsyncNotifications","commit_stats":null,"previous_names":["georgiifirsov/asyncnotifications"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GeorgiiFirsov/AsyncNotifications","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgiiFirsov%2FAsyncNotifications","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgiiFirsov%2FAsyncNotifications/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgiiFirsov%2FAsyncNotifications/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgiiFirsov%2FAsyncNotifications/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GeorgiiFirsov","download_url":"https://codeload.github.com/GeorgiiFirsov/AsyncNotifications/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgiiFirsov%2FAsyncNotifications/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262208710,"owners_count":23275459,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous-programming","client-server","concurrency","concurrent-programming","cplusplus","cplusplus-14","cpp14","microsoft","microsoft-rpc","remote-procedure-call","rpc"],"created_at":"2024-11-06T03:09:22.167Z","updated_at":"2025-06-27T06:34:46.476Z","avatar_url":"https://github.com/GeorgiiFirsov.png","language":"C++","readme":"# AsyncNotifications\n\n\u003e Work in progress\n\nIt is an example of Client-Server application model, that demonstrates\nMicrosoft AsyncRPC technology in action.\n\nThis project contains two applications:\n- Server app\n- Client app\n\n### Server application\n\nAfter this program started it is ready to receive subscription requests from many \nclients. It receives a synchronous client RPC-call, which is an request for subscription,\nregister it inside itself and sends a reply for success of failure of registration. After\nthis action it receives an asynchronous call and leaves it pending until a specified\nevent happened (see more about events in [Events](#Events) section). In case of an event \nserver invokes `RpcAsyncCompleteCall` to send some information about it to subscribed client.\nIf all client's subscriptions are cancelled asyncronous call will be aborted with `ERROR_CANCELLED`\nstatus. In case of cancellation of a subscription server decreases an internal binded with \nconcrete client counter (not to cancel asynchronous call mistakenly).\n\n### Client application\n\nClient will be able to subscribe to any number of distinct events. It'll wait for asyncroous\ncall result in a separate thread in order to allow concurrent waiting and subscribing.\n\n### Events\n\nIn order to simplify this application events will be as simple as possible:\nAfter minimal preparations server will wait for input with keyboard. Subscription will be a letter\nwhich should be the first letter of servers' input string. Server will be able to handle any\nnumber of input strings.\n\n### Commands\n\nClient app will have simple rules applied to it's input:\n- `quit` will close client in common way with all cleaning procedures\n- `exit` will terminate client immediately (by calling `std::terminate`)\n- `+[a-zA-Z]` will send a subscription request to server\n- `-[a-zA-Z]` will send a cancellation request to server\n- any other string will be ignored\n\nServer's commands will be simpler:\n- `quit` will close client in common way with all cleaning procedures\n- `exit` will terminate client immediately (by calling `ExitProcess`)\n- any other string will be assumed as an input\n\n### Session example\n\n![Screenshot 1](./Images/Picture-1.png)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgiifirsov%2Fasyncnotifications","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeorgiifirsov%2Fasyncnotifications","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgiifirsov%2Fasyncnotifications/lists"}