Last active
April 21, 2022 11:09
-
-
Save rifkyputra/e6c1947a750b769d2fb2fc8e44fe7bdd to your computer and use it in GitHub Desktop.
server - GRPC Chat App with Flutter and Dart
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import 'dart:async'; | |
| import 'package:grpc/grpc.dart'; | |
| import 'package:uuid/uuid.dart'; | |
| import 'package:fixnum/fixnum.dart' as fn; | |
| import 'proto/chat.pbgrpc.dart'; | |
| Future<void> main() async { | |
| final server = Server( | |
| [ChatService()], | |
| const <Interceptor>[], | |
| CodecRegistry( | |
| codecs: const [ | |
| GzipCodec(), | |
| IdentityCodec(), | |
| ], | |
| ), | |
| ); | |
| await server.serve(port: 54242); | |
| print('Server listening on port ${server.port}...'); | |
| } | |
| class ChatService extends ChatMessagingServiceBase { | |
| StreamController<MessageRequest> chatStream = StreamController.broadcast(); | |
| Set<String> users = {}; | |
| @override | |
| Future<Empty> sendMessage( | |
| ServiceCall call, | |
| MessageRequest request, | |
| ) async { | |
| print(request.message); | |
| if (users.contains(request.username)) { | |
| chatStream.sink.add(request); | |
| } | |
| return Empty(); | |
| } | |
| @override | |
| Stream<MessageResponse> subscribe( | |
| ServiceCall call, | |
| SubscribeRequest request, | |
| ) async* { | |
| users.add(request.username); | |
| await for (MessageRequest res in chatStream.stream) { | |
| yield (MessageResponse( | |
| id: Uuid().v4(), | |
| fromUsername: res.username, | |
| message: res.message, | |
| dateEpoch: fn.Int64(DateTime.now().millisecondsSinceEpoch), | |
| )); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment