From a97663b1341210788c23c1c78bc30d4ef63d74d5 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Mon, 8 Oct 2018 19:03:10 +0200 Subject: [PATCH] Bumping version to 0.1.11 --- RELEASE_NOTES.md | 2 +- src/Client/ReleaseNotes.fs | 4 +-- src/PiServer/PiServer.fs | 38 ++++++++++++++++++----- src/PiServer/PiServer.fsproj | 2 +- src/PiServer/read-tag.js | 59 ++++++++++-------------------------- 5 files changed, 50 insertions(+), 55 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 48b240a..3baebda 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,6 +1,6 @@ # Release Notes -## 0.1.10 - 2018-10-08 +## 0.1.11 - 2018-10-08 * Stream from Azure Blob Storage diff --git a/src/Client/ReleaseNotes.fs b/src/Client/ReleaseNotes.fs index 79e2652..64b734b 100644 --- a/src/Client/ReleaseNotes.fs +++ b/src/Client/ReleaseNotes.fs @@ -1,13 +1,13 @@ module internal ReleaseNotes -let Version = "0.1.10" +let Version = "0.1.11" let IsPrerelease = false let Notes = """ # Release Notes -## 0.1.10 - 2018-10-08 +## 0.1.11 - 2018-10-08 * Stream from Azure Blob Storage diff --git a/src/PiServer/PiServer.fs b/src/PiServer/PiServer.fs index d92660d..0de88e2 100644 --- a/src/PiServer/PiServer.fs +++ b/src/PiServer/PiServer.fs @@ -2,7 +2,7 @@ open Microsoft.Extensions.DependencyInjection open Giraffe open Saturn open FSharp.Control.Tasks.ContextInsensitive - +open System open Microsoft.AspNetCore.NodeServices open System.Runtime.InteropServices open Thoth.Json.Net @@ -10,6 +10,7 @@ open ServerCore.Domain open System.Threading.Tasks open System.Threading +open System.Diagnostics let tagServer = "https://audio-hub.azurewebsites.net" // let tagServer = "http://localhost:8085" @@ -21,6 +22,7 @@ let port = 8086us let isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) let cts = new CancellationTokenSource() +let mutable runningProcess = null let play (nodeServices : INodeServices) (cancellationToken:CancellationToken) (uri:string) = task { use webClient = new System.Net.WebClient() @@ -36,6 +38,7 @@ let play (nodeServices : INodeServices) (cancellationToken:CancellationToken) (u else printfn "Playing %s" uri let p = new System.Diagnostics.Process() + runningProcess <- p let s = System.Diagnostics.ProcessStartInfo() p.EnableRaisingEvents <- true let tcs = new TaskCompletionSource() @@ -61,6 +64,12 @@ let stop (nodeServices : INodeServices) = task { let! r = nodeServices.InvokeExportAsync("./play-audio", "stop") return r else + printfn "trying to kill" + let processes = Process.GetProcessesByName("omxplayer.bin") + for p in processes do + if not p.HasExited then + printfn "kill" + p.Kill() cts.Cancel() return "Test" } @@ -178,15 +187,28 @@ let nodeServices = app.Services.GetService(typeof) :?> INodeServi let startupTask = executeStartupActions nodeServices startupTask.Wait() +printfn "%A" startupTask.Result + +let mutable running = null +let rec rfidLoop() = task { + let! token = nodeServices.InvokeExportAsync("./read-tag", "read", "tag") + + if String.IsNullOrEmpty token then + let! _ = Task.Delay(TimeSpan.FromSeconds 0.5) + () + else + printfn "Read: %s" token + running <- executeTag nodeServices token + printfn "Waiting for remove" + let! _ = nodeServices.InvokeExportAsync("./read-tag", "removed", token) + let! _ = stop nodeServices + () + return! rfidLoop() +} + if isWindows then () else - let r = nodeServices.InvokeExportAsync("./read-tag", "read", "tag") - r.Wait() - let token = r.Result - let r = executeTag nodeServices token - r.Wait() - -printfn "%A" startupTask.Result + rfidLoop().Wait() System.Console.ReadKey() |> ignore \ No newline at end of file diff --git a/src/PiServer/PiServer.fsproj b/src/PiServer/PiServer.fsproj index bced714..513ccdc 100644 --- a/src/PiServer/PiServer.fsproj +++ b/src/PiServer/PiServer.fsproj @@ -14,7 +14,7 @@ Always - + Always diff --git a/src/PiServer/read-tag.js b/src/PiServer/read-tag.js index b9df404..59502fd 100644 --- a/src/PiServer/read-tag.js +++ b/src/PiServer/read-tag.js @@ -3,50 +3,23 @@ const mfrc522 = require("mfrc522-rpi"); //# Init WiringPi with SPI Channel 0 mfrc522.initWiringPi(0); -//# This loop keeps checking for chips. If one is near it will get the UID and authenticate -console.log("scanning..."); -console.log("Please put chip or keycard in the antenna inductive zone!"); -console.log("Press Ctrl-C to stop."); +exports.read = function (callback, lastTag) { + mfrc522.reset(); + let response = mfrc522.findCard(); + if (!response.status) { + callback(null, ""); + return; + } -exports.read = function (callback, fileName) { - var lastTag = ""; - var readInterval = setInterval(function(){ - mfrc522.reset(); - - let response = mfrc522.findCard(); - if (!response.status) { - return; - } + //# Get the UID of the card + response = mfrc522.getUid(); + if (!response.status) { + console.log("UID Scan Error"); + return; + } - clearInterval(readInterval); - - //# Get the UID of the card - response = mfrc522.getUid(); - if (!response.status) { - console.log("UID Scan Error"); - return; - } - //# If we have the UID, continue - const uid = response.data; - var data = uid.map(x => x.toString(16)).join(''); - if(lastTag != data) { - lastTag = data; - console.log("Card read UID: %s", data); - callback(null, data); - } - }, 500); + const uid = response.data; + var data = uid.map(x => x.toString(16)).join(''); + callback(null, data); } - -exports.removed = function (callback, lastTag) { - var readInterval = setInterval(function(){ - mfrc522.reset(); - - let response = mfrc522.findCard(); - if (!response.status) { - clearInterval(readInterval); - callback(null, ""); - return; - } - }, 500); -} \ No newline at end of file