private async Task sendInputSequence(string sInputSequence) { for (int i = 0; i < sInputSequence.Length; ++i) { char cInputLetter = sInputSequence[i]; OvenManager.eBtn input = s_rLetterToBtnMapping[cInputLetter]; m_rOvenManager.setBtn(input, OvenManager.eBtnState.PRESSED); await(Task.Delay(iDELAY_AFTER_BTN_PRESS)); m_rOvenManager.setBtn(input, OvenManager.eBtnState.UNPRESSED); await(Task.Delay(iDELAY_AFTER_BTN_RELEASE)); } }
// ugly but somewhat functional private async Task allowRemoteControl() { TaskCompletionSource <bool> canStopListening = new TaskCompletionSource <bool>(); try { var streamSocketListener = new StreamSocketListener(); streamSocketListener.ConnectionReceived += async (StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) => { Debug.WriteLine("TCP: connection received"); string request; using (var streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead())) { while (true) { request = await streamReader.ReadLineAsync(); Debug.WriteLine("TCP <- " + request); if (request.StartsWith("close")) { canStopListening.SetResult(true); args.Socket.Dispose(); } if (request.StartsWith("serial")) { string sFromUART = await m_rOvenManager.readFromUART(); Debug.WriteLine("UART <- " + sFromUART); } else if (request.StartsWith("konami")) { await sendInputSequence(KONAMI_CODE);; } else if (request.StartsWith("JP")) { await sendInputSequence(INGR_1); } else if (request.StartsWith("PP")) { await sendInputSequence(INGR_2); } else if (request.StartsWith("MR")) { await sendInputSequence(INGR_3); } else if (request.StartsWith("SA")) { await sendInputSequence(INGR_4); } else // key press/release - request is one of [U|D|L|R][0|1] { OvenManager.eBtn btn = s_rLetterToBtnMapping[request[0]]; OvenManager.eBtnState btnState = request[1] == '0' ? OvenManager.eBtnState.PRESSED : OvenManager.eBtnState.UNPRESSED; m_rOvenManager.setBtn(btn, btnState); } } } }; await streamSocketListener.BindServiceNameAsync("12345"); Debug.WriteLine("TCP: waiting for connections"); await canStopListening.Task; Debug.WriteLine("TCP: closing"); streamSocketListener.Dispose(); } catch (Exception ex) { SocketErrorStatus webErrorStatus = SocketError.GetStatus(ex.GetBaseException().HResult); Debug.WriteLine(webErrorStatus.ToString() != "Unknown" ? webErrorStatus.ToString() : ex.Message); } }