{"id":17950247,"url":"https://github.com/reubenbond/orleanseventjournal","last_synced_at":"2025-03-24T23:32:08.667Z","repository":{"id":30454694,"uuid":"34008405","full_name":"ReubenBond/OrleansEventJournal","owner":"ReubenBond","description":"Simple calculator demonstrating a Web-based console \u0026 an Event Sourcing implementation for Project Orleans.","archived":false,"fork":false,"pushed_at":"2015-04-19T08:21:51.000Z","size":5923,"stargazers_count":21,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-19T05:24:26.104Z","etag":null,"topics":["actors","c-sharp","console","demo","event-sourcing","http","javascript","journal","orleans","website"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ReubenBond.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}},"created_at":"2015-04-15T17:28:32.000Z","updated_at":"2023-08-29T10:39:28.000Z","dependencies_parsed_at":"2022-08-22T22:10:37.970Z","dependency_job_id":null,"html_url":"https://github.com/ReubenBond/OrleansEventJournal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReubenBond%2FOrleansEventJournal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReubenBond%2FOrleansEventJournal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReubenBond%2FOrleansEventJournal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReubenBond%2FOrleansEventJournal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ReubenBond","download_url":"https://codeload.github.com/ReubenBond/OrleansEventJournal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245372193,"owners_count":20604487,"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":["actors","c-sharp","console","demo","event-sourcing","http","javascript","journal","orleans","website"],"created_at":"2024-10-29T09:38:23.333Z","updated_at":"2025-03-24T23:32:07.418Z","avatar_url":"https://github.com/ReubenBond.png","language":"C#","readme":"# OrleansEventJournal\nSimple calculator demonstrating a Web-based console \u0026amp; an Event Sourcing implementation for Project Orleans.\n\nRepos without any explanation suck, so here goes.\n\nThis is a demo project, demonstrating some things which we've been developing.\n\n## Console\nThe first thing it shows is a Web-based terminal for Orleans. The idea is that you can perform arbitrary operations on actors. The console uses runtime code generation to create an efficient interface with the actor system.\n\nIn the console, type `to \u003cactor kind\u003e/\u003cactor id\u003e` to change scope to a new actor - tab-completion helps you discover the actor type names. The names are derived from the actor interface name, by default. Use the `Actor` attribute to override actor names.\nOnly `Guid` ids are supported (i.e, actors deriving from `IGrainWithGuidKey`).\n\nOnce an actor has been set using the `to` command, use tab-completion to discover the actor methods. An example might be `setDisplayName bob`, which would correspond to a `SetDisplayName(string name)` method on an actor. Command names can be overridden using the (poorly named) `Event` attribute. Complex commands (which require JSON object, for example) can be input using the `js` mode.\n\nThe console POSTs command to a very basic \"invoke\" endpoint (ASP.NET Web API self-hosted via OWIN). The demo avoids authentication and authorization. That stuff has been implemented in our private code, but didn't apply to the demo. You can still see some auth code in `console.js`.\n\n## Event Sourcing\nThe other thing which we demonstrate here is a terse Event Sourcing API. The API is based around a single consumer-facing method with various overloads to handle async, etc:\n```c#\nprotected Task Event(Action validate, Func\u003cIActorInterface, Task\u003e emit,  Action apply);\n```\n\nThe event sourcing API is conceptually explained in [this comment](https://github.com/dotnet/orleans/issues/343#issuecomment-94103353), where I've tried to clarify some misunderstandings and lay out the future plans.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freubenbond%2Forleanseventjournal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freubenbond%2Forleanseventjournal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freubenbond%2Forleanseventjournal/lists"}