public static Game FromSetup(GameSetup setup, string filepath) { using (FileStream fs = new FileStream(filepath, FileMode.CreateNew)) { fs.Write(setup.Hash); fs.Write(setup.Owner); fs.Write(setup.Repository); fs.Write(setup.Token); fs.Write((int)setup.Settings); var users = setup.GetUsers().ToArray(); fs.Write(users.Length); foreach (var u in users) u.ToStream(fs); var contributors = setup.GetContributors().Where(c => c.Active).ToArray(); fs.Write(contributors.Length); foreach (var c in contributors) fs.Write(c.Name); var commits = setup.GetCommits().ToArray(); fs.Write(commits.Length); foreach (var c in commits) { byte[] text = Encoding.ASCII.GetBytes(c.Sha); fs.Write(text, 0, 40); fs.WriteZeros(users.Length); } var mess = (setup as IGame).GetMessages().ToArray(); foreach (var m in mess) m.ToStream(fs); } var game = Game.FromFile(filepath); game.Add(StateMessage.CreateStarted()); game.Add(new RoundStartMessage(1)); return game; }