blob: 4343d57d3f61882918dea811e481d0e93d5b6249 [file] [log] [blame]
import 'dart:async';
import 'dart:convert' show UTF8;
import 'game.dart' show Game;
import 'package:sky/mojo/embedder.dart' show embedder;
import 'package:ether/echo_client.dart' show EchoClient;
import 'package:ether/syncbase_client.dart'
show Perms, SyncbaseClient, SyncbaseTable;
log(String msg) {
DateTime now = new DateTime.now();
print('$now $msg');
}
Perms emptyPerms() => new Perms()..json = '{}';
class SyncbaseEchoImpl {
final EchoClient _echoClient;
final SyncbaseClient _syncbaseClient;
final Game game;
SyncbaseEchoImpl(this.game)
: _echoClient = new EchoClient(
embedder.connectToService, 'https://mojo.v.io/echo_server.mojo'),
_syncbaseClient = new SyncbaseClient(embedder.connectToService,
'https://mojo.v.io/syncbase_server.mojo');
int seq = 0;
SyncbaseTable tb;
String sendMsg, recvMsg, putStr, getStr;
Future doEcho() async {
log('DemoApp.doEcho');
sendMsg = seq.toString();
recvMsg = '';
seq++;
log('setState sendMsg done');
String recvMsgAsync = await _echoClient.echo(sendMsg);
recvMsg = recvMsgAsync;
log('setState recvMsg done');
game.updateCallback(); // tell the UI to set/update state.
}
Future doSyncbaseInit() async {
log('DemoApp.doSyncbaseInit');
if (tb != null) {
log('syncbase already initialized');
return;
}
var app = _syncbaseClient.app('app');
if (!(await app.exists())) {
await app.create(emptyPerms());
}
var db = app.noSqlDatabase('db');
if (!(await db.exists())) {
await db.create(emptyPerms());
}
var table = db.table('table');
if (!(await table.exists())) {
await table.create(emptyPerms());
}
tb = table;
log('syncbase is now initialized');
}
Future doPutGet() async {
log('DemoApp.doPutGet');
await doSyncbaseInit();
putStr = seq.toString();
getStr = '';
seq++;
log('setState putStr done');
// TODO(sadovsky): Switch to tb.put/get once they exist.
var row = tb.row('key');
await row.put(UTF8.encode(putStr));
var getBytes = await row.get();
getStr = UTF8.decode(getBytes);
log('setState getStr done');
game.updateCallback(); // tell the UI to set/update state.
}
}