示例#1
0
    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);
    }
示例#2
0
文件: Sync.cs 项目: atillabyte/World
    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");
    }