mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-08-06 15:21:21 +08:00
Experiment with serving shared preferences over grpc
The idea is that for GitJournal's web version, we can have it talking with the mobile version which runs a grpc server. All of the git + fs logic will still run in the mobile and the web version will only have the UI.
This commit is contained in:
96
lib/experiments/grpc_server.dart
Normal file
96
lib/experiments/grpc_server.dart
Normal file
@ -0,0 +1,96 @@
|
||||
import 'package:fixnum/fixnum.dart';
|
||||
import 'package:grpc/grpc.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import 'package:gitjournal/generated/shared_preferences.pb.dart';
|
||||
import 'package:gitjournal/generated/shared_preferences.pbgrpc.dart';
|
||||
|
||||
class SharedPreferencesService extends SharedPreferencesServiceBase {
|
||||
final SharedPreferences pref;
|
||||
|
||||
SharedPreferencesService(this.pref);
|
||||
|
||||
@override
|
||||
Future<BoolMessage> containsKey(ServiceCall _, StringMessage message) async {
|
||||
return BoolMessage()..value = pref.containsKey(message.value);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StringListMessage> getKeys(ServiceCall _, EmptyMessage __) async {
|
||||
return StringListMessage(value: pref.getKeys());
|
||||
}
|
||||
|
||||
@override
|
||||
Future<OptionalBool> getBool(ServiceCall _, StringMessage key) async {
|
||||
return OptionalBool(value: pref.getBool(key.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<OptionalInt> getInt(ServiceCall _, StringMessage key) async {
|
||||
var ret = pref.getInt(key.value);
|
||||
if (ret != null) {
|
||||
return OptionalInt(value: Int64(ret));
|
||||
}
|
||||
return OptionalInt();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<OptionalDouble> getDouble(ServiceCall _, StringMessage key) async {
|
||||
return OptionalDouble(value: pref.getDouble(key.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<OptionalString> getString(ServiceCall _, StringMessage key) async {
|
||||
return OptionalString(value: pref.getString(key.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<StringListMessage> getStringList(
|
||||
ServiceCall _, StringMessage key) async {
|
||||
return StringListMessage(value: pref.getStringList(key.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BoolMessage> setBool(ServiceCall _, SetBoolRequest req) async {
|
||||
return BoolMessage(value: await pref.setBool(req.key, req.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BoolMessage> setInt(ServiceCall _, SetIntRequest req) async {
|
||||
return BoolMessage(value: await pref.setInt(req.key, req.value.toInt()));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BoolMessage> setDouble(ServiceCall _, SetDoubleRequest req) async {
|
||||
return BoolMessage(value: await pref.setDouble(req.key, req.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BoolMessage> setString(ServiceCall _, SetStringRequest req) async {
|
||||
return BoolMessage(value: await pref.setString(req.key, req.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BoolMessage> setStringList(
|
||||
ServiceCall _, SetStringListRequest req) async {
|
||||
return BoolMessage(value: await pref.setStringList(req.key, req.value));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BoolMessage> remove(ServiceCall _, StringMessage key) async {
|
||||
return BoolMessage(value: await pref.remove(key.value));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> main(List<String> args) async {
|
||||
var pref = await SharedPreferences.getInstance();
|
||||
final server = Server(
|
||||
[SharedPreferencesService(pref)],
|
||||
const <Interceptor>[],
|
||||
CodecRegistry(codecs: const [GzipCodec(), IdentityCodec()]),
|
||||
);
|
||||
await server.serve(port: 50051);
|
||||
print('Server listening on port ${server.port}...');
|
||||
}
|
||||
|
||||
// todo: Create some kind of QR code for getting the URL
|
Reference in New Issue
Block a user