// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.tictactoe;

enum Player : uint8 {
    X = 1;
    O = 0;
};

// Completion status of a fidl call.
enum Status {
    OK = 0;
    ERROR = 1;
};

// Result a fidl call's indicating success or failure and reason for failure.
struct ExecuteResult {
    Status status;
    string? error_message;
};

[Discoverable]
protocol GameTracker {
    RecordWin(Player player) -> (ExecuteResult result);

    // Request that the game tracker start sending score updates to the message
    // queue identified by [queue_token].  This method will send an update
    // immediately when this method is called and then each time the score
    // changes.
    SubscribeToScore(string queue_token) -> (ExecuteResult result);

    // Request that the game tracker stop sending score updates to the message
    // queue identified by [queue_token].  If a queue identified by [queue_token]
    // is not set up, this method will do nothing.
    UnsubscribeFromScore(string queue_token) -> (ExecuteResult result);
};
