private ApnsBroker(string keyId, string privateKey, string teamId, string bundleId, bool isTesting, int apnsPort) { this.keyId = keyId; this.teamId = teamId; this.bundleId = bundleId; handler = new Http2CustomHandler(); client = new HttpClient(handler); apnsUri = string.Format(ApnsServerTemplate, isTesting ? ".development" : string.Empty, apnsPort); byte[] secretKeyBlob = Convert.FromBase64String(privateKey); this.privateKey = CngKey.Import(secretKeyBlob, CngKeyBlobFormat.Pkcs8PrivateBlob); }
static void Main(string[] args) { // Create custom handler for HTTP/2 var h2handler = new Http2CustomHandler(); // Set HTTP/2 to use only 1 connection per server to force connection sharing h2handler.MaxConnectionsPerServer = 1; if (args.Length == 0) { Console.WriteLine("Usage: ConsoleSSE <Server-Sent Events URL> [<Server-Sent Events URL>] ..."); System.Environment.Exit(1); } for (int i = 0; i < args.Length; i++) { var evt = new EventSourceReader(new Uri(args[i]), h2handler).Start(); evt.MessageReceived += (object sender, EventSourceMessageEventArgs e) => { Console.WriteLine($"{e.Message}"); }; evt.Disconnected += async(object sender, DisconnectEventArgs e) => { // Default ReceiveDataTimeout is 30 seconds, thus is EventSource data is not received for 30 seconds // this will be triggered to reconnect. If you'd like to set a longer timeout, add // h2handler.ReceiveDataTimeout = new TimeSpan(days, hours, mins, sec) after h2handler is // instantiated above. Given reconnects are automatic, the Console.WriteLine message // isn't required, but left in for informational purposes. Console.WriteLine($"Receive Timeout: {e.ReconnectDelay}ms - Reconnecting..."); await Task.Delay(e.ReconnectDelay); evt.Start(); // Reconnect to the same URL }; } while (true) { Thread.Sleep(1000); } }