{"id":15813846,"url":"https://github.com/mattgreen/openim","last_synced_at":"2025-04-01T01:48:54.864Z","repository":{"id":2129139,"uuid":"3072208","full_name":"mattgreen/openim","owner":"mattgreen","description":"Extensible Win32 instant messaging client","archived":false,"fork":false,"pushed_at":"2012-01-06T21:08:43.000Z","size":532,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-06T04:07:00.706Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mattgreen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-12-30T01:32:08.000Z","updated_at":"2014-10-06T07:35:38.000Z","dependencies_parsed_at":"2022-09-09T18:01:03.925Z","dependency_job_id":null,"html_url":"https://github.com/mattgreen/openim","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/mattgreen%2Fopenim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattgreen%2Fopenim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattgreen%2Fopenim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattgreen%2Fopenim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mattgreen","download_url":"https://codeload.github.com/mattgreen/openim/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246569006,"owners_count":20798341,"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":[],"created_at":"2024-10-05T04:06:55.523Z","updated_at":"2025-04-01T01:48:54.832Z","avatar_url":"https://github.com/mattgreen.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Introduction\nMany people experiment in college; I experimented with software architecture. Over the course of a few years in college I hacked on a component-based GUI Win32 C++ instant messaging client that interoperates with AOL's proprietary OSCAR protocol.\n\n### Why?\n\nAt the time, there were few quality IM clients on the Windows platform.\nMost were either unable to use all of the features of AIM, or had\nsubpar UI. (Unfortunately, this situation hasn't changed much.)\n\n### What makes this interesting?\nOpenIM uses a publish/subscribe architecture to minimize coupling\nbetween components. This results in components that are\nsmaller, easier to reason about, and test. For example, the AIM protocol\ncomponent has no knowledge of any UI; it merely responds to method calls\nand sends out events (such as AccountConnectedEvent) as they occur. The EventManager is responsible for distributing Events to registered components. Partitioning features along component boundaries makes development incredibly pleasant.\n\n(Also, the use of \u003ca href=\"http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern\"\u003eCRTP\u003c/a\u003e in \u003ca href=\"https://github.com/mattgreen/openim/blob/master/OpenIM/Events/AccountEvents.hpp\"\u003eAccountEvents.hpp\u003c/a\u003e should induce the Inception theme in\nyour head.)\n\n### What became of it?\nI graduated, and became more social. Regardless, I thoroughly enjoyed the late nights spent hacking on it, and do\nbelieve it is possible to make nice software, even in C++.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattgreen%2Fopenim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattgreen%2Fopenim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattgreen%2Fopenim/lists"}