{"id":15977008,"url":"https://github.com/fornever/ebomber","last_synced_at":"2025-06-25T23:06:38.598Z","repository":{"id":1454479,"uuid":"1688307","full_name":"ForNeVeR/eBomber","owner":"ForNeVeR","description":"Bomberbot server written in Erlang.","archived":false,"fork":false,"pushed_at":"2011-05-31T10:19:15.000Z","size":176,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-05T20:44:01.385Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Erlang","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/ForNeVeR.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":"2011-05-01T16:41:47.000Z","updated_at":"2019-07-15T21:13:37.000Z","dependencies_parsed_at":"2022-07-29T14:09:08.373Z","dependency_job_id":null,"html_url":"https://github.com/ForNeVeR/eBomber","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ForNeVeR/eBomber","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForNeVeR%2FeBomber","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForNeVeR%2FeBomber/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForNeVeR%2FeBomber/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForNeVeR%2FeBomber/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ForNeVeR","download_url":"https://codeload.github.com/ForNeVeR/eBomber/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForNeVeR%2FeBomber/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261967132,"owners_count":23237663,"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-07T22:41:55.140Z","updated_at":"2025-06-25T23:06:38.570Z","avatar_url":"https://github.com/ForNeVeR.png","language":"Erlang","funding_links":[],"categories":[],"sub_categories":[],"readme":"eBomber project\n==============\n\nLicensing\n=========\nAll source code of this project is licensed under GNU GPLv3 license. See the\nLICENSE file for details.\n\nmochijson2 library licensed under GPL-compartible MIT license.\n\nDescription\n===========\n\nAnother server for bomberbot project. Written in Erlang.\n\nSee https://github.com/eugenezamriy/bomberbot for details.\n\nBuilding\n========\n\nFirst, you need last version of Erlang and OTP installed. See http://erlang.org\nfor details. To build current version of source code, execute following\ncommands:\n\n    $ cd eBomber\n    $ erl -make\n\nOther way from Erlang console:\n\n    $ erl\n    Erlang R14B02 (erts-5.8.3) [smp:8:8] [rq:8] [async-threads:0]\n\n    Eshell V5.8.3  (abort with ^G)\n    1\u003e cd(\"path/to/eBomber\").\n    path/to/eBomber\n    ok\n    2\u003e make:all().\n    ... (some lines skipped)\n    up_to_date\n\nUsing\n=====\n\n### Starting server\n\nFirst, run Erlang console from the ebin directory:\n\n    $ cd ebin \u0026\u0026 erl\n\nThen start ebomber server:\n\n    1\u003e ebomber_app:start().\n\nDefault listening port is 6666. You also may define port in the ebomber.app\nfile.\n\nFor now server only stays in memory and logs all incoming messages. Stay tuned.\n\n### Stopping server\n\nUse the following function call:\n\n    2\u003e ebomber_app:stop().\n\nThis will stop the whole application.\n\nArchitecture\n============\n\nNote that project is still not finished, so this is more a notes about future\nproject structure.\n\n### Common\n\nAll internal data communication is performed in Erlang format; no JSON inside\nserver. JSON data parsed when received from clients and created before sending\nto client by json_connector process/module. In future, server may be expanded to\nhandle other data types and connection methods.\n\n### Data format\n\nInside server, all data packets represented as Erlang terms. Here I'll note\ndifferences between JSON and Erlang data formats.\n\nPlease note that eBomber do not use mochijson2's object notation. I think it's\nslightly confusing.\n\nJSON struct / object maps to Erlang tuple of tuples. Keys are always represented\nby atoms, values vary. For example, following JSON object:\n\n    { \"key1\": \"value1\", \"key2\": \"value2\" }\n\nmay be represented as Erlang term\n\n    {{key1, \u003c\u003c\"value1\"\u003e\u003e}, {key2, \u003c\u003c\"value2\"\u003e\u003e}}\n\nStrings are always saved as binaries; never as lists (see previous example).\n\nLists are stored as lists, numbers as numbers. Nothing to add here.\n\n### ebomber_app module\n\nThis module implements Erlang application behavior and contains functions for\nstarting and stopping whole application. It is the main entry point for the\napplication user.\n\n### ebomber module\n\nMain program module. It processes data from clients and redirects it to games.\nAt start it spawns json_socket_listener (and any other types of listeners, if\nany other of them will exist). At need it spawns game processes.\n\n### game module\n\ngame process spawns timer process at start, and may spawn bomb processes when\nthe game is running.\n\n### map module\n\nNow this module only contains few helper functions for dealing with bomberbot\nmaps.\n\n### message module\n\nThis module designed for managing internal message data format. All other\nmodules must use only functions exported from this module for dealing with\nmessages.\n\n### connector module\n\nThis module contains generic functions for sending data to various connectors.\n\n### json_socket_listener module\n\njson_socket_listener is process for listening sockets and spawning\njson_connector processes for connecting clients.\n\n### json_connector module\n\njson_connector is process that processes JSON data recieved from clients. Then\nit sends processed data to main server.\n\nAny connector module must have generic way to send some response back to client.\n\n### json_converter module\n\nThis module converts messages between internal Erlang format and external JSON\nformat.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffornever%2Febomber","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffornever%2Febomber","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffornever%2Febomber/lists"}