public void AddObserver(Grpc.Core.AsyncDuplexStreamingCall <TRequest, TResponce> observer) { lock (observers) { this.observers.Add(observer); } }
private static async Task InputLoop(Grpc.Core.AsyncDuplexStreamingCall <ChatMessage, ChatMessage> chatStream) { while (true) { var input = Console.ReadLine(); await chatStream.RequestStream.WriteAsync(new ChatMessage { User = _userName, Text = input }); } }
internal Subscriber(Grpc.Core.AsyncDuplexStreamingCall <FastQueueService.CompleteRequest, FastQueueService.Messages> duplexStream, Action <ISubscriber, IEnumerable <Message> > messagesHandler) { this.duplexStream = duplexStream; this.messagesHandler = messagesHandler; requestStream = duplexStream.RequestStream; responseStream = duplexStream.ResponseStream; cancellationTokenSource = new CancellationTokenSource(); }
private static async Task InputLoop(Grpc.Core.AsyncDuplexStreamingCall <EchoMessage, EchoMessage> echoStream) { Console.WriteLine("Type something"); while (true) { var input = Console.ReadLine(); await echoStream.RequestStream.WriteAsync(new EchoMessage { Message = input }); } }
internal Publisher(Grpc.Core.AsyncDuplexStreamingCall <FastQueueService.WriteRequest, FastQueueService.PublisherAck> duplexStream, Action <long> ackHandler) { this.duplexStream = duplexStream; this.ackHandler = ackHandler; requestStream = duplexStream.RequestStream; responseStream = duplexStream.ResponseStream; cancellationTokenSource = new CancellationTokenSource(); sequenceNumber = 1; }
//removeObserver only would be called synchronously by close in KeepAliveListener, no need to get lock here public void RemoveObserver(Grpc.Core.AsyncDuplexStreamingCall <TRequest, TResponce> listener) { lock (observers) { this.observers.Remove(listener); if (this.observers.Count == 0) { leaseImpl.RemoveKeepAlive(leaseId); } } }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _fileSystemWatcher = new FileSystemWatcher { Filter = "*.*", Path = this._folder, IncludeSubdirectories = true, }; _fileSystemWatcher.Created += ManageChange; _fileSystemWatcher.Deleted += ManageChange; _fileSystemWatcher.Renamed += ManageRename; _fileSystemWatcher.EnableRaisingEvents = true; _notifyChangeCall = _syncClient.NotifyChange(); await Task.CompletedTask; }
public void Resume() { if (closed) { return; } if (stream == null) { // id is not really useful today but it may be in etcd 3.4 watchID = -1; Etcdserverpb.WatchCreateRequest createRequest = new Etcdserverpb.WatchCreateRequest { Key = key.GetByteString(), PrevKv = watchOption.IsPrevKV, ProgressNotify = watchOption.IsProgressNotify, RangeEnd = watchOption.EndKey.GetByteString(), StartRevision = watchOption.Revision }; if (watchOption.EndKey.IsPresent) { createRequest.RangeEnd = watchOption.EndKey.GetByteString(); } if (watchOption.IsNoDelete) { createRequest.Filters.Add(Etcdserverpb.WatchCreateRequest.Types.FilterType.Nodelete); } if (watchOption.IsNoPut) { createRequest.Filters.Add(Etcdserverpb.WatchCreateRequest.Types.FilterType.Noput); } Grpc.Core.CallOptions callOptions = new Grpc.Core.CallOptions(); Etcdserverpb.WatchRequest request = new Etcdserverpb.WatchRequest { CreateRequest = createRequest }; var rsp = watchClient.Watch(callOptions); rsp.RequestStream.WriteAsync(request); stream = rsp; this.watchID = rsp.ResponseStream.Current.WatchId; } }
private void LoginButtonClick(object sender, RoutedEventArgs args) { _username = nameTextBox.Text; var ver = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location); Title = $"Slug Chess v{ver.FileMajorPart}.{ver.FileMinorPart}.{ver.FileBuildPart}"; var result = _connection.Call.Login(new ChessCom.LoginForm { Username = _username, MajorVersion = ver.FileMajorPart.ToString(), MinorVersion = ver.FileMinorPart.ToString(), BuildVersion = ver.FileBuildPart.ToString() }); if (result.SuccessfullLogin) { WriteTextNonInvoke("Logged in as " + _username); if (result.LoginMessage != "") { WriteTextNonInvoke(result.LoginMessage); } _userToken = result.UserToken; //loginButton.Content = "U logged in"; loginButton.IsEnabled = false; lookForMatchButton.IsEnabled = true; tbLoginStatus.Text = $"{_username}"; _matchMessageStream = _connection.Call.ChatMessageStream(); _matchMessageStream.RequestStream.WriteAsync(new ChessCom.ChatMessage { UserToken = _userToken, Reciver = "system", Sender = _username, Message = "init" }); Task.Run(() => MessageCallRunner()); //TODO recive message callback //TODO handle shutdown of message } else { WriteTextNonInvoke("Login failed. " + result.LoginMessage); } }
async static void SendMessage(Grpc.Core.AsyncDuplexStreamingCall <CommandMessage, CommandMessage> chat, CommandMessage user) { await chat.RequestStream.WriteAsync(user); }
public void Runner() { ChessCom.LookForMatchResult result = _connection.Call.LookForMatch(new ChessCom.UserIdentity { UserToken = _userToken }); if (result.Succes) { _isSingelplayer = false; Instance._matchToken = result.MatchToken; Instance._opponentUsername = result.OpponentUsername; Instance.Dispatcher.Invoke(() => { _mediaPlayer.Stop(); _mediaPlayer.Open(MatchStartSoundUri); _mediaPlayer.Play(); StartMatch(result.IsWhitePlayer, result.MatchToken, result.Rules, result.Timerules); }); var matchStream = _connection.Call.Match(); _matchStream = matchStream; //Open match stream call _matchStream.RequestStream.WriteAsync(new ChessCom.MovePacket { AskingForDraw = false, DoingMove = false, MatchToken = _matchToken, UserToken = _userToken }); bool matchEnded = false; while (!matchEnded) { if (!matchStream.ResponseStream.MoveNext().Result) { matchEnded = true; } if (matchEnded) { continue; } ChessCom.MoveResult move = matchStream.ResponseStream.Current; //if (move.) //{ //} if (move.MoveHappned) { if (move.Move.AvailableMoves.Count > 0) //Prossess board from server { Instance.Dispatcher.Invoke(() => { if (move.Move.From != _myLastMove.From || move.Move.To != _myLastMove.To) { WriteTextNonInvoke("Opponent did move other!"); } //Pices killedPice = _globalState.DoMoveTo(move.Move.To); _globalState.UpdateFromMove(move.Move); if ((Pices)move.Move.CapturedPice != Pices.Non) { _killedPices.Add((Pices)move.Move.CapturedPice); } _lastMoveFrom = _globalState.CanSeeField(_clientIsPlayer, move.Move.From) ? move.Move.From : ""; _lastMoveTo = _globalState.CanSeeField(_clientIsPlayer, move.Move.To) ? move.Move.To : ""; ClearBoard(); UpdateBoardFromGlobalState(); _mediaPlayer.Stop(); _mediaPlayer.Open(MoveSoundUri); _mediaPlayer.Play(); }); } else //Prossess board self { if (move.Move.From != _myLastMove.From || move.Move.To != _myLastMove.To) { Instance.Dispatcher.Invoke(() => { WriteTextNonInvoke("Opponent did move!"); //messageBox.AppendText("Opponent did move!\n"); //messageBox.CaretPosition = messageBox.CaretPosition.DocumentEnd; //messageBox.BringIntoView(); //messageBox.Focus(); _globalState.Selected = move.Move.From; Pices killedPice = _globalState.DoMoveTo(move.Move.To); if (killedPice != Pices.Non) { _killedPices.Add(killedPice); } _globalState.Selected = null; _lastMoveFrom = _globalState.CanSeeField(_clientIsPlayer, move.Move.From) ? move.Move.From : ""; _lastMoveTo = _globalState.CanSeeField(_clientIsPlayer, move.Move.To) ? move.Move.To : ""; ClearBoard(); UpdateBoardFromGlobalState(); _mediaPlayer.Stop(); _mediaPlayer.Open(MoveSoundUri); _mediaPlayer.Play(); }); } } if (_globalState.WhiteTurn) { _timer?.Stop(); //WriteTextInvoke("Black time before: " + _blackStaticTimeLeft.ToString(@"mm\:ss") + $" secSpent {move.Move.SecSpent} secs left {move.SecsLeft}" ); _blackStaticTimeLeft = TimeSpan.FromSeconds(move.SecsLeft); _blackTimeSpan = _blackStaticTimeLeft; //WriteTextInvoke("Black time after: " + _blackStaticTimeLeft.ToString(@"mm\:ss")); Instance.Dispatcher.Invoke(() => { lbBlackTimeLeft.Content = _blackTimeSpan.ToString(@"mm\:ss"); }); _timer = new DispatcherTimer(new TimeSpan(0, 0, 1), DispatcherPriority.Normal, delegate { lbWhiteTimeLeft.Content = _whiteTimeSpan.ToString(@"mm\:ss"); if (_whiteTimeSpan == TimeSpan.Zero) { _timer.Stop(); InvokedRanoutOfTime(); } else if (_whiteTimeSpan < TimeSpan.FromSeconds(10)) { _mediaPlayerTimeRunningOut.Stop(); _mediaPlayerTimeRunningOut.Play(); } _whiteTimeSpan = _whiteTimeSpan.Add(TimeSpan.FromSeconds(-1)); }, Application.Current.Dispatcher); _timer.Start(); } else { _timer?.Stop(); _whiteStaticTimeLeft = TimeSpan.FromSeconds(move.SecsLeft); _whiteTimeSpan = _whiteStaticTimeLeft; Instance.Dispatcher.Invoke(() => { lbWhiteTimeLeft.Content = _whiteTimeSpan.ToString(@"mm\:ss"); }); _timer = new DispatcherTimer(new TimeSpan(0, 0, 1), DispatcherPriority.Normal, delegate { lbBlackTimeLeft.Content = _blackTimeSpan.ToString(@"mm\:ss"); if (_blackTimeSpan == TimeSpan.Zero) { _timer.Stop(); InvokedRanoutOfTime(); } else if (_blackTimeSpan < TimeSpan.FromSeconds(10)) { _mediaPlayerTimeRunningOut.Stop(); _mediaPlayerTimeRunningOut.Play(); } _blackTimeSpan = _blackTimeSpan.Add(TimeSpan.FromSeconds(-1)); }, Application.Current.Dispatcher); _timer.Start(); } } if (move.OpponentAskingForDraw) { Instance.Dispatcher.Invoke(() => { string popupText = "Draw?"; string textBoxText = "Opponent is asking for draw. Do you accept?"; MessageBoxButton button = MessageBoxButton.YesNo; MessageBoxImage icon = MessageBoxImage.Error; var drawResult = MessageBox.Show(textBoxText, popupText, button, icon); if (drawResult == MessageBoxResult.Yes) { _matchStream.RequestStream.WriteAsync(new ChessCom.MovePacket { AskingForDraw = true }); matchEnded = true; } }); } else if (move.MatchEvent == ChessCom.MatchEvent.UnexpectedClosing) { Instance.Dispatcher.Invoke(() => { string popupText = "UnexpextedClosing"; string textBoxText = "Opponents client unexpectedly closed"; WriteTextNonInvoke(textBoxText); MessageBoxButton button = MessageBoxButton.OK; MessageBoxImage icon = MessageBoxImage.Exclamation; MessageBox.Show(textBoxText, popupText, button, icon); EndOfMatch(_clientIsPlayer == ClientIsPlayer.White?ChessCom.MatchEvent.WhiteWin: ChessCom.MatchEvent.BlackWin); matchEnded = true; }); } else if (move.MatchEvent == ChessCom.MatchEvent.WhiteWin || move.MatchEvent == ChessCom.MatchEvent.BlackWin) { Instance.Dispatcher.Invoke(() => { EndOfMatch(move.MatchEvent); matchEnded = true; }); _matchStream.RequestStream.WriteAsync(new ChessCom.MovePacket { CheatMatchEvent = ChessCom.MatchEvent.ExpectedClosing, AskingForDraw = false, DoingMove = false, MatchToken = _matchToken, UserToken = _userToken }).Wait(); _matchStream.RequestStream.CompleteAsync(); } } _matchStream = null; } else { string popupText = "Failed"; string textBoxText = "Failed to find match"; MessageBoxButton button = MessageBoxButton.OK; MessageBoxImage icon = MessageBoxImage.Error; MessageBox.Show(textBoxText, popupText, button, icon); } }
public void SetBiRequestStreamClient(Grpc.Core.AsyncDuplexStreamingCall <Nacos.Payload, Nacos.Payload> streamCall) => this.streamCall = streamCall;
private void LoginButtonClick(object sender, RoutedEventArgs args) { string username = nameTextBox.Text; var ver = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location); Title = $"Slug Chess v{ver.FileMajorPart}.{ver.FileMinorPart}.{ver.FileBuildPart}"; var result = _connection.Call.Login(new ChessCom.LoginForm { Username = username, MajorVersion = ver.FileMajorPart.ToString(), MinorVersion = ver.FileMinorPart.ToString(), BuildVersion = ver.FileBuildPart.ToString() }); if (result.SuccessfullLogin) { _userdata = new ChessCom.UserData { Username = result.UserData.Username, Usertoken = result.UserData.Usertoken, Elo = result.UserData.Elo }; WriteTextNonInvoke("Logged in as " + username); if (result.LoginMessage != "") { WriteTextNonInvoke(result.LoginMessage); } //_userToken = result.UserToken; //loginButton.Content = "U logged in"; loginButton.IsEnabled = false; lookForMatchButton.IsEnabled = true; foreach (var item in ((MenuItem)TopMenu.Items[0]).Items) { if (item is MenuItem menuitem) { if ((string)menuitem.Header != "_Host" || (string)menuitem.Header != "_Browse Games") { menuitem.IsEnabled = true; } } } tbLoginStatus.Text = $"{_userdata.Username}"; _matchMessageStream = _connection.Call.ChatMessageStream(); _matchMessageStream.RequestStream.WriteAsync(new ChessCom.ChatMessage { SenderUsertoken = _userdata.Usertoken, ReciverUsertoken = "system", SenderUsername = _userdata.Username, Message = "init" }); Task.Run(() => MessageCallRunner()); _heartbeatTimer.Elapsed += (obj, e) => { _connection?.Call.Alive(new ChessCom.Heartbeat { Alive = true }); }; _heartbeatTimer.AutoReset = true; _heartbeatTimer.Enabled = true; //TODO recive message callback //TODO handle shutdown of message } else { WriteTextNonInvoke("Login failed. " + result.LoginMessage); } }
internal PublisherMany(Grpc.Core.AsyncDuplexStreamingCall <FastQueueService.PublishManyRequest, FastQueueService.PublisherAck> duplexStream, Func <long, Task> ackHandler) : base(duplexStream.ResponseStream, ackHandler) { this.duplexStream = duplexStream; requestStream = duplexStream.RequestStream; }
internal Publisher(Grpc.Core.AsyncDuplexStreamingCall <FastQueueService.PublishRequest, FastQueueService.PublisherAck> duplexStream, Action <long> ackHandler) : base(duplexStream.ResponseStream, ackHandler) { this.duplexStream = duplexStream; requestStream = duplexStream.RequestStream; }