Beispiel #1
0
        /// <summary>
        /// Closes the connection to the WebSocket server
        /// </summary>
        /// <param name="closeCode">The WebSocket close status</param>
        /// <param name="reason">A description of the close status.</param>
        /// <returns></returns>
        public PPError Close(WebSocketCloseStatus closeCode, string reason = null)
        {
            ThrowIfNotConnected();

            return((PPError)PPBWebSocket.Close(this, (ushort)closeCode,
                                               string.IsNullOrEmpty(reason) ? null : new Var(reason),
                                               new CompletionCallback(OnClose)));
        }
Beispiel #2
0
        private async Task <PPError> CloseAsyncCore(WebSocketCloseStatus closeCode, string reason = null, MessageLoop closeLoop = null)
        {
            var tcs = new TaskCompletionSource <PPError>();
            EventHandler <PPError> handler = (s, e) => { tcs.TrySetResult(e); };

            try
            {
                Closed += handler;

                if (MessageLoop == null && closeLoop == null)
                {
                    Close(closeCode, reason);
                }
                else
                {
                    Action <PPError> action = new Action <PPError>((e) =>
                    {
                        var result = (PPError)PPBWebSocket.Close(this, (ushort)closeCode,
                                                                 string.IsNullOrEmpty(reason) ? null : new Var(reason),
                                                                 new BlockUntilComplete()
                                                                 );
                        tcs.TrySetResult(result);
                    }
                                                                   );
                    InvokeHelper(action, closeLoop);
                }
                return(await tcs.Task);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                tcs.SetException(exc);
                return(PPError.Aborted);
            }
            finally
            {
                Closed -= handler;
            }
        }