示例#1
0
 public void AddObserver(Grpc.Core.AsyncDuplexStreamingCall <TRequest, TResponce> observer)
 {
     lock (observers)
     {
         this.observers.Add(observer);
     }
 }
示例#2
0
 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 });
     }
 }
示例#3
0
 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();
 }
示例#4
0
 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 });
     }
 }
示例#5
0
 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;
 }
示例#6
0
 //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);
         }
     }
 }
示例#7
0
        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;
        }
示例#8
0
            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);
            }
        }
示例#10
0
 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);
            }
        }
示例#12
0
 public void SetBiRequestStreamClient(Grpc.Core.AsyncDuplexStreamingCall <Nacos.Payload, Nacos.Payload> streamCall) => this.streamCall = streamCall;
示例#13
0
        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);
            }
        }
示例#14
0
 internal PublisherMany(Grpc.Core.AsyncDuplexStreamingCall <FastQueueService.PublishManyRequest, FastQueueService.PublisherAck> duplexStream,
                        Func <long, Task> ackHandler) : base(duplexStream.ResponseStream, ackHandler)
 {
     this.duplexStream = duplexStream;
     requestStream     = duplexStream.RequestStream;
 }
示例#15
0
 internal Publisher(Grpc.Core.AsyncDuplexStreamingCall <FastQueueService.PublishRequest, FastQueueService.PublisherAck> duplexStream,
                    Action <long> ackHandler) : base(duplexStream.ResponseStream, ackHandler)
 {
     this.duplexStream = duplexStream;
     requestStream     = duplexStream.RequestStream;
 }