Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 private void ClearUnits()
 {
     Dispatch.Invoke(new Action(() => m_units.Clear()),
                     DispatcherPriority.Send);
 }
Esempio n. 3
0
 private void RemoveUnit(LogInfo unit)
 {
     Dispatch.Invoke(new Action(() => m_units.Remove(unit)),
                     DispatcherPriority.Send);
 }
Esempio n. 4
0
 private void InsertUnit(LogInfo unit, int index)
 {
     Dispatch.Invoke(new Action(() => m_units.Insert(index, unit)),
                     DispatcherPriority.Send);
 }
Esempio n. 5
0
 private void AddUnit(LogInfo unit)
 {
     Dispatch.Invoke(new Action(() => m_units.Add(unit)),
                     DispatcherPriority.Send);
 }
Esempio n. 6
0
        /// <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}");
            }
        }