private static void SyncQueue() { if (!ActionsLib.AllActions().Any()) { return; } try { var client = new HttpClient(); client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.UserAgent.ParseAdd("Chrome/22.0.1229.94"); //client.DefaultRequestHeaders.Authorization = _authHeader; var response = client.GetAsync(ApiQueueUrl, HttpCompletionOption.ResponseContentRead).Result; if (response.IsSuccessStatusCode) { var result = (List <ActionContainer>) JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result, typeof(List <ActionContainer>)); foreach (var actionsContainer in result) { var arrived = actionsContainer.GetAction(); if (arrived != null) { ExecuteOnMainThread(() => ActionsQueue.Add(arrived)).Wait(); } } if (result.Any()) { client.DeleteAsync(ApiQueueUrl).Wait(); } ActionRequestArrived?.Invoke(null, EventArgs.Empty); } } catch (Exception ex) { var a = ex; } }
public async Task ExecuteAction(TinBotAction action) { if (action == null || !_body.IsReady) { return; } try { for (int i = 0; i < Math.Max(1, action.Repeat); i++) { switch (action.Type) { case EActionType.Speak: await Speak(((SpeakAction)action).Text); break; case EActionType.Face: var sb = Faces[((FaceAction)action).TinBotFaces]; await ExecuteOnMainThread(() => PlayAndPause(sb)); break; case EActionType.Toggle: if (_body.IsReady) { await ExecuteToggle((ToggleAction)action); } break; case EActionType.Move: if (_body.IsReady) { var moveAction = (MovementAcion)action; if (_body.Servos.ContainsKey(moveAction.Servo)) { await Move(moveAction); } } break; case EActionType.Saved: var found = ActionsLib.AllActions().FirstOrDefault( x => x.Name.Equals(((SavedAction)action).ActionName, StringComparison.OrdinalIgnoreCase)); if (found != null) { await ExecuteAction(found); } break; case EActionType.Sequence: var sequenceAction = (SequenceAction)action; foreach (var paralellAction in sequenceAction.Sequence) { List <Task> waiters = new List <Task>(); foreach (var actionContainer in paralellAction) { var a = actionContainer.GetAction(); var t = ExecuteAction(a); if (!a.IgnoreBlockingInSeries) { waiters.Add(t); } } await Task.WhenAll(waiters); } break; } await Task.Delay(action.ExtraWaitTime); } } catch (Exception ex) { return; } }