public async Task Invoke(SplashWindow splashWindow) { SplashWindow = splashWindow; await Task.Run(async() => { double progress = 0; double a = 0; double b = Count; foreach (var i in this) { a++; progress = a / b; await Alert(i.Message, progress); Try.Invoke(() => { if (!i.Dispatch) { i.Action(); return; } Dispatch.Invoke(i.Action); }, e => Log.Write <StartQueue>(e)); } }); Completed?.Invoke(this, EventArgs.Empty); }
private void ClearUnits() { Dispatch.Invoke(new Action(() => m_units.Clear()), DispatcherPriority.Send); }
private void RemoveUnit(LogInfo unit) { Dispatch.Invoke(new Action(() => m_units.Remove(unit)), DispatcherPriority.Send); }
private void InsertUnit(LogInfo unit, int index) { Dispatch.Invoke(new Action(() => m_units.Insert(index, unit)), DispatcherPriority.Send); }
private void AddUnit(LogInfo unit) { Dispatch.Invoke(new Action(() => m_units.Add(unit)), DispatcherPriority.Send); }
/// <summary> /// Handles incoming messages. /// </summary> /// <param name="json">the incoming json as string</param> private async void _handleMessage(string json) { ReceivePacket packet; try { packet = JsonConvert.DeserializeObject <ReceivePacket>(json); } catch (Exception e) { _log(LogLevel.WARN, $"Couldn't parse Packet JSON, {e}"); return; } try { // ReSharper disable once SwitchStatementMissingSomeCases switch (packet.OpCode) { case OpCode.DISPATCH: { // ReSharper disable once SwitchStatementMissingSomeCases switch (packet.Type) { case GatewayEvent.READY: var readyDispatch = ((JObject)packet.Data).ToObject <ReadyDispatch>(); SessionId = readyDispatch.SessionId; _log(LogLevel.DEBUG, $"Ready {readyDispatch.SessionId}"); _log(LogLevel.INFO, "Shard Ready"); Identified?.Invoke(this, null); break; case GatewayEvent.RESUMED: { var replayed = CloseSequence - Sequence; _log(LogLevel.DEBUG, $"RESUMED {SessionId} | replayed {replayed} events."); _log(LogLevel.INFO, "Shard resumed connection"); break; } } if (packet.Seq != null) { Sequence = (int)packet.Seq; } if (packet.Type == null) { _log(LogLevel.WARN, $"Received Dispatch with missing type, {packet.Data}"); break; } Dispatch?.Invoke(this, new DispatchEventArgs(Id, packet.Data, (GatewayEvent)packet.Type)); _log(LogLevel.DEBUG, $"Received Dispatch of type {packet.Type}"); break; } case OpCode.HEARTBEAT: _log(LogLevel.DEBUG, $"Received Keep-Alive request (OP {packet.OpCode}). Sending response..."); await _heartbeatAsync().ConfigureAwait(false); break; case OpCode.RECONNECT: _log(LogLevel.DEBUG, $"Received Reconnect request (OP {packet.OpCode}). Closing connection now..."); await DisconnectAsync((int)GatewayCloseCode.UNKNOWN_ERROR, "Received Reconnect request") .ConfigureAwait(false); break; case OpCode.INVALID_SESSION: _log(LogLevel.DEBUG, $"Received Invalidate request (OP {packet.OpCode}). Invalidating...."); var data = (bool)packet.Data; if (data) { await DisconnectAsync((int)GatewayCloseCode.UNKNOWN_ERROR, "Session Invalidated") .ConfigureAwait(false); break; } SessionId = null; Sequence = null; await DisconnectAsync((int)WebSocketCloseStatus.NormalClosure, "Session Invalidated"); break; case OpCode.HELLO: _log(LogLevel.DEBUG, $"Received HELLO packet (OP {packet.OpCode}). Initializing keep-alive..."); var helloData = ((JObject)packet.Data).ToObject <HelloPacket>(); _startHeartbeatTimer(helloData.HeartbeatInterval); await _authenticateAsync(); break; case OpCode.HEARTBEAT_ACK: var latency = DateTime.Now - HeartbeatSentAt; var pingMs = (int)latency.TotalMilliseconds; _log(LogLevel.DEBUG, $"Received Heartbeat Ack (OP {packet.OpCode}), Latency of {pingMs}ms"); LastHeartbeatAcked = true; LatencyUpdate?.Invoke(this, new LatencyUpdateArgs(Id, pingMs)); break; default: _log(LogLevel.WARN, $"Received unknown op-code: {packet.OpCode}"); break; } } catch (Exception e) { _log(LogLevel.ERROR, $"Exception in Shard#_handleMessage, {e}"); } }