static private VPump100Data[] ConvertToVPump100Datas(DataTable datatable, out int createCount) { NullOrDBNullConverter nc = new NullOrDBNullConverter(0f); createCount = 0; List <VPump100Data> list = new List <VPump100Data>(); foreach (DataRow row in datatable.Rows) { DateTime dt = Convert.ToDateTime(row[ColumnNamesForPump.StrTime]); float instantFlux = Convert.ToSingle(nc.Convert(row[ColumnNamesForPump.Flux])); float efficienty = Convert.ToSingle(nc.Convert(row[ColumnNamesForPump.Efficiency])); float sum = Convert.ToSingle(nc.Convert(row[ColumnNames.TuWater])); float remain = Convert.ToSingle(nc.Convert(row[ColumnNames.ReWater])); PumpStatus pumpStatus = VPumpStatusParser.ParsePumpStatus(row[ColumnNamesForPump.PumpStatus].ToString()); ForceStartStatus forceStatus = VPumpStatusParser.ParseForceStartStatus(row[ColumnNamesForPump.ForceRun].ToString()); VibrateStatus vibrateStatus = VPumpStatusParser.ParseVibrateStatus(row[ColumnNamesForPump.Vibrate].ToString()); PumpPowerStatus powerStatus = VPumpStatusParser.ParsePowerStatus(row[ColumnNamesForPump.Power].ToString()); VPump100Data data = new VPump100Data(); data.DT = dt; data.InstantFlux = instantFlux; data.Efficiency = efficienty; data.TotalAmount = sum; data.RemainAmount = remain; data.PumpStatus = pumpStatus; data.ForceStartStatus = forceStatus; data.VibrateStatus = vibrateStatus; data.PowerStatus = powerStatus; list.Add(data); if (list.Count >= 5) { break; } } createCount = list.Count; while (list.Count < 5) { list.Add(new VPump100Data()); } return(list.ToArray()); }
/// <summary> /// /// </summary> /// <param name="bs"></param> /// <param name="startIndex"></param> /// <returns></returns> static public VPump100Data ToVPump100Data(byte[] bs, int startIndex) { int start = startIndex; Int64 ticks = BitConverter.ToInt64(bs, start); start += 8; float instantFlux = BitConverter.ToSingle(bs, start); start += 4; float eff = BitConverter.ToSingle(bs, start); start += 4; float total = BitConverter.ToSingle(bs, start); start += 4; float remain = BitConverter.ToSingle(bs, start); start += 4; PumpStatus pumpStatus = (PumpStatus)bs[start++]; ForceStartStatus forceStartStatus = (ForceStartStatus)bs[start++]; VibrateStatus vibrateStatus = (VibrateStatus)bs[start++]; PumpPowerStatus powerStatus = (PumpPowerStatus)bs[start++]; VPump100Data data = new VPump100Data(); data.DT = new DateTime(ticks); data.InstantFlux = instantFlux; data.Efficiency = eff; data.ForceStartStatus = forceStartStatus; data.PowerStatus = powerStatus; data.PumpStatus = pumpStatus; data.RemainAmount = remain; data.TotalAmount = total; data.VibrateStatus = vibrateStatus; return(data); }
private static async Task <VibrateStatus> HandleVibrateStart(ButtplugClientDevice device, VibrateStart vs, VibrateStatus status) { if (IsVorze(device)) { var newDirection = random(2) == 0 ? true : false; await device.SendVorzeA10CycloneCmd(Convert.ToUInt32(vs.strength * 100), newDirection); return(await vs.time.MatchAsync(async time => { await Task.Delay(time); await device.SendVorzeA10CycloneCmd(StrengthToVorzeRotation(status.strength), status.direction); return status; }, () => new VibrateStatus(vs.strength, newDirection))); } else { await device.SendVibrateCmd(vs.strength); // TODO handle intervals return(await vs.time.MatchAsync(async time => { await Task.Delay(time); await device.SendVibrateCmd(status.strength); return status; }, () => new VibrateStatus(vs.strength, false))); } }
static async Task WatchLogFileAsync(string filename, ButtplugClient client, ButtplugClientDevice vaginalDevice, ButtplugClientDevice analDevice) { var wh = new AutoResetEvent(false); var fsw = new FileSystemWatcher("."); fsw.Filter = filename; fsw.EnableRaisingEvents = true; fsw.Changed += (s, e) => wh.Set(); var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); fs.Seek(0, SeekOrigin.End); // Watch the file VibrateStatus currentSetting = VibrateStatus.Stopped(); using (var sr = new StreamReader(fs)) { while (true) { // Reset position for new file if (fs.Position > fs.Length) { fs.Seek(0, SeekOrigin.Begin); } string s = sr.ReadLine(); if (s != null) { bool isAnal = s.Contains("JNAnal"); bool isVaginal = s.Contains("JNVaginal"); if (isAnal || isVaginal) { var deviceToSendTo = isAnal ? analDevice : vaginalDevice; Either <Exception, VibrateCommand> vlOrE = ParseVibrateLine(s); Console.WriteLine("[RumbleLog] " + vlOrE); await vlOrE.Match(async vl => { try { if (vl is VibrateStart) { currentSetting = await HandleVibrateStart(deviceToSendTo, vl as VibrateStart, currentSetting); } else if (vl is VibrateStop) { await HandleVibrateStop(deviceToSendTo); currentSetting = VibrateStatus.Stopped(); } } catch (ButtplugDeviceException e) { Console.WriteLine(e); Console.WriteLine("Device disconnected."); deviceToSendTo = await AttemptReconnect(client, deviceToSendTo); } catch (Exception e) { Console.WriteLine("Unknown exception, attempting reconnect anyway. Exception: " + e); deviceToSendTo = await AttemptReconnect(client, deviceToSendTo); } }, async e => Console.WriteLine(e)); } } else { wh.WaitOne(10); } } } // TODO end loop //wh.Close(); }