public static void Sync([Aliases("u")] string user, [Aliases("a")] string auth, [Aliases("i")] string input, [Aliases("t")] string target) { var client = PlayerIOClient.Helpers.Authentication.LogOn("everybody-edits-su9rn58o40itdbnw69plyw", user, auth); var world = File.Exists(input) ? new World(InputType.JSON, File.ReadAllText(input), client) : new World(InputType.BigDB, input, client); var sync = new SyncWorld(world, client, target, null); sync.OnTimeout += () => { Environment.Exit(-1); }; sync.OnCompleted += () => { Environment.Exit(0); }; System.Threading.Thread.Sleep(-1); }
public SyncWorld(World world, Client client, string targetId, Connection connection, int retries = 0) { if (connection == null || !connection.Connected) { connection = client.Multiplayer.CreateJoinRoom(targetId, "", true, null, null); } connection.OnMessage += (s, e) => { switch (e.Type) { case "init": Task.Delay(1000).Wait(); connection.Send("save"); break; case "saved": var status = Upload(world, client, connection, targetId); switch (status) { case Status.Incomplete: retries++; if (retries < 16) { connection.Send("save"); } else { connection.Disconnect(); OnTimeout.Invoke(); } break; case Status.Completed: OnCompleted.Invoke(); break; } break; } }; connection.OnDisconnect += (s, e) => { var sync = new SyncWorld(world, client, targetId, connection, retries); }; connection.Send("init"); }