{"action":"created","issue":{"url":"https://api.github.com/repos/FAForever/replay-server/issues/1","repository_url":"https://api.github.com/repos/FAForever/replay-server","labels_url":"https://api.github.com/repos/FAForever/replay-server/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/FAForever/replay-server/issues/1/comments","events_url":"https://api.github.com/repos/FAForever/replay-server/issues/1/events","html_url":"https://github.com/FAForever/replay-server/pull/1","id":158530217,"number":1,"title":"New async replay server","user":{"login":"Crotalus","id":254972,"avatar_url":"https://avatars.githubusercontent.com/u/254972?v=3","gravatar_id":"","url":"https://api.github.com/users/Crotalus","html_url":"https://github.com/Crotalus","followers_url":"https://api.github.com/users/Crotalus/followers","following_url":"https://api.github.com/users/Crotalus/following{/other_user}","gists_url":"https://api.github.com/users/Crotalus/gists{/gist_id}","starred_url":"https://api.github.com/users/Crotalus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Crotalus/subscriptions","organizations_url":"https://api.github.com/users/Crotalus/orgs","repos_url":"https://api.github.com/users/Crotalus/repos","events_url":"https://api.github.com/users/Crotalus/events{/privacy}","received_events_url":"https://api.github.com/users/Crotalus/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/FAForever/replay-server/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":{"login":"Crotalus","id":254972,"avatar_url":"https://avatars.githubusercontent.com/u/254972?v=3","gravatar_id":"","url":"https://api.github.com/users/Crotalus","html_url":"https://github.com/Crotalus","followers_url":"https://api.github.com/users/Crotalus/followers","following_url":"https://api.github.com/users/Crotalus/following{/other_user}","gists_url":"https://api.github.com/users/Crotalus/gists{/gist_id}","starred_url":"https://api.github.com/users/Crotalus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Crotalus/subscriptions","organizations_url":"https://api.github.com/users/Crotalus/orgs","repos_url":"https://api.github.com/users/Crotalus/repos","events_url":"https://api.github.com/users/Crotalus/events{/privacy}","received_events_url":"https://api.github.com/users/Crotalus/received_events","type":"User","site_admin":false},"milestone":null,"comments":1,"created_at":"2016-06-05T00:00:33Z","updated_at":"2016-06-07T11:54:57Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/FAForever/replay-server/pulls/1","html_url":"https://github.com/FAForever/replay-server/pull/1","diff_url":"https://github.com/FAForever/replay-server/pull/1.diff","patch_url":"https://github.com/FAForever/replay-server/pull/1.patch"},"body":"This is a continuation of the gevent replay server which never was completed / in use. I've rewritten it to use async / await instead.\r\n\r\nCompared to old replay server:\r\n\r\n* Event model instead of threads\r\n* Keeps the replay stream untampered, the old system inserts custom time-data to be able to delay live replay, this one actually parses the command stream instead.\r\n* Game duration can be reported in actual game time instead of RL time\r\n* Watchers of a live replay now gets whole command stream if game ends\r\n* Live replay doesn't hang if a game is too recent\r\n* No more base64-encoding of the replay, let fafreplay be a zipfile instead containing metadata + scfareplay\r\n* Replays will be created even if all players don't leave a game after it's ended\r\n\r\nStuff left to do:\r\n\r\n- [x] Extract replay info from database and append to json header\r\n    - would be nice with added git tag here of game version.\r\n    - Alternative/addition to this would be to prepend the json header when replay is downloaded to get latest dynamic data (n_likes, n_downloads, comments etc)\r\n- [x] Insert replay id in database to notify it's been created\r\n- [x] Store desync state with replay / database\r\n- [x] Store ticks with replay / database\r\n- [x] Queue replay for database persistance if it failed to be inserted immediately\r\n    - [ ] Process pending replays if database is working again\r\n- [ ] Rewrite client side decoding of replays to support new fafreplay format\r\n- [ ] Add support for FA /ReplayLength command line arg to show total replay length when watching\r\n- [ ] Testing\r\n\r\nNeeds to be verified when it's completed:\r\n- [ ] No more zero-sized / corrupted replays \r\n- [ ] Fewer replay desyncs. Maybe, remains to be seen.\r\n   "},"comment":{"url":"https://api.github.com/repos/FAForever/replay-server/issues/comments/224258199","html_url":"https://github.com/FAForever/replay-server/pull/1#issuecomment-224258199","issue_url":"https://api.github.com/repos/FAForever/replay-server/issues/1","id":224258199,"user":{"login":"Sheeo","id":37968,"avatar_url":"https://avatars.githubusercontent.com/u/37968?v=3","gravatar_id":"","url":"https://api.github.com/users/Sheeo","html_url":"https://github.com/Sheeo","followers_url":"https://api.github.com/users/Sheeo/followers","following_url":"https://api.github.com/users/Sheeo/following{/other_user}","gists_url":"https://api.github.com/users/Sheeo/gists{/gist_id}","starred_url":"https://api.github.com/users/Sheeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Sheeo/subscriptions","organizations_url":"https://api.github.com/users/Sheeo/orgs","repos_url":"https://api.github.com/users/Sheeo/repos","events_url":"https://api.github.com/users/Sheeo/events{/privacy}","received_events_url":"https://api.github.com/users/Sheeo/received_events","type":"User","site_admin":false},"created_at":"2016-06-07T11:54:57Z","updated_at":"2016-06-07T11:54:57Z","body":"Oh wow, I hadn't noticed this until now. Awesome that you're doing this @Crotalus!\r\n\r\nWe do need to butt heads together to get .fafreplay sorted, since this isn't the only producer of the format (And there are several consumers we'll need to update)."}}
{"actor":{"display_login":"Sheeo"}}