public double calcActivenessFromBufferedUsingLastData(int indexLastTo) { //仕様書p20の3 ③バッファ2の平均値を飛行機の高さに使用 ///バッファ2をAnalyseHelper.movingAverage(filteredL, filteredL.Length - 1)を使って平均化した値が飛行機の位置Yになります。 double activeness = double.NaN; if (buffer2.Count > 0) { if (buffer2.Count >= indexLastTo) { activeness = AnalyseHelper.Average(buffer2.ToArray(), buffer2.Count - indexLastTo, buffer2.Count - 1); } else { activeness = AnalyseHelper.Average(buffer2.ToArray(), 0, buffer2.Count - 1); } } if (!isstoredActiveness) { return(activeness); } //activenesses.Add(activeness);// 呼び出し毎にログ取ってるけどいいのかなぁ… return(activeness); }
public static void select_odd() { string sql = " select * from a_all where a_event_id is not null and a_odd_id is null"; DataTable dt_all = SQLServerHelper.get_table(sql); foreach (DataRow row in dt_all.Rows) { //get type id string type_id = ""; type_id = string.IsNullOrEmpty(row["a_type_id"].ToString()) ? AnalyseHelper.get_bet_type_id(row["type_name"].ToString()) : row["a_type_id"].ToString(); //insert a_odd sql = " select * from a_odd where event_id= {0} and type_id={1} " + " and m1='{2}' and m2='{3}' and m3='{4}' and m4='{5}' and m5='{6}' and m6='{7}'" + " and r1='{8}' and r2='{9}' and r3='{10}' and r4='{11}' and r5='{12}' and r6='{13}'"; sql = string.Format(sql, row["a_event_id"].ToString(), type_id, row["m1"].ToString(), row["m2"].ToString(), row["m3"].ToString(), row["m4"].ToString(), row["m5"].ToString(), row["m6"].ToString(), row["r1"].ToString(), row["r2"].ToString(), row["r3"].ToString(), row["r4"].ToString(), row["r5"].ToString(), row["r6"].ToString()); DataTable dt_temp = SQLServerHelper.get_table(sql); if (dt_temp.Rows.Count > 0) { sql = "delete from a_odd where id={0}"; sql = string.Format(sql, dt_temp.Rows[0]["id"].ToString()); SQLServerHelper.exe_sql(sql); } sql = " insert into a_odd (timespan,website_id,event_id,type_id,a_all_id,m1,m2,m3,m4,m5,m6,r1,r2,r3,r4,r5,r6,o1,o2,o3,o4,o5,o6)" + " values({0},{1},{2},{3},{4},'{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}')"; sql = string.Format(sql, UnixTime.unix_now.ToString(), row["a_website_id"].ToString(), row["a_event_id"].ToString(), row["a_type_id"].ToString(), row["id"].ToString(), row["m1"].ToString(), row["m2"].ToString(), row["m3"].ToString(), row["m4"].ToString(), row["m5"].ToString(), row["m6"].ToString(), row["r1"].ToString(), row["r2"].ToString(), row["r3"].ToString(), row["r4"].ToString(), row["r5"].ToString(), row["r6"].ToString(), row["o1"].ToString(), row["o2"].ToString(), row["o3"].ToString(), row["o4"].ToString(), row["o5"].ToString(), row["o6"].ToString()); SQLServerHelper.exe_sql(sql); //insert a_odd_log sql = " insert into a_odd_log (timespan,website_id,event_id,type_id,a_all_id,m1,m2,m3,m4,m5,m6,r1,r2,r3,r4,r5,r6,o1,o2,o3,o4,o5,o6)" + " values({0},{1},{2},{3},{4},'{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}')"; sql = string.Format(sql, UnixTime.unix_now.ToString(), row["a_website_id"].ToString(), row["a_event_id"].ToString(), row["a_type_id"].ToString(), row["id"].ToString(), row["m1"].ToString(), row["m2"].ToString(), row["m3"].ToString(), row["m4"].ToString(), row["m5"].ToString(), row["m6"].ToString(), row["r1"].ToString(), row["r2"].ToString(), row["r3"].ToString(), row["r4"].ToString(), row["r5"].ToString(), row["r6"].ToString(), row["o1"].ToString(), row["o2"].ToString(), row["o3"].ToString(), row["o4"].ToString(), row["o5"].ToString(), row["o6"].ToString()); SQLServerHelper.exe_sql(sql); //update a_all's a_type_id,a_odd_id sql = "select max(id) from a_odd_log "; DataTable dt_max = SQLServerHelper.get_table(sql); string odd_id = dt_max.Rows[0][0].ToString(); sql = "update a_all set a_type_id={0},a_odd_id={1} where id={2}"; sql = string.Format(sql, type_id, odd_id, row["id"].ToString()); SQLServerHelper.exe_sql(sql); } }
static double sd(double[] numArray) { double mean = AnalyseHelper.Average(numArray, 0, numArray.Length); double n = 0.0; for (int i = 0; i < numArray.Length; i++) { //next = numArray[i] + System.Math.Pow(next - mean, 2.0); n = n + System.Math.Pow(numArray[i] - mean, 2.0); } return(System.Math.Sqrt(n / numArray.Length)); }
public double calcActivenessFromBuffered(int startIdx) { //仕様書p20の3 ③バッファ2の平均値を飛行機の高さに使用 ///バッファ2をAnalyseHelper.movingAverage(filteredL, filteredL.Length - 1)を使って平均化した値が飛行機の位置Yになります。 double activeness = 0; if (buffer2.Count > 0) { //平均値 activeness = AnalyseHelper.Average(buffer2.ToArray(), startIdx, buffer2.Count - 1); } if (!isstoredActiveness) { return(activeness); } //activenesses.Add(activeness);// 呼び出し毎にログ取ってるけどいいのかなぁ… return(activeness); }
/** * isupdateActivenessesを管理するメソッド * ・心拍数が40~180の範囲を超えている状態が5秒続いたら、画面の色更新を止めます * ・心拍数が40~180の範囲に入っている状態が3秒続いたら、画面の色更新をします * * * Revised conditions * sample num: 20 * * 1. HbT 3cm: abs(median - mean)<3 * 2. HbT 3cm: non zero * 3. Hb 1cm: median(v-v(1))<0.3 * 4. Gyro-Z: median(v-v(1))<7 * */ static void updateActivenesses() { if (Hot2gApplication.Instance.datastore.stability.Count <= 0) { return; } List <double> brain1 = Hot2gApplication.Instance.datastore.l1Ac; List <double> brain3 = Hot2gApplication.Instance.datastore.l3Ac; List <double> gyroZ = Hot2gApplication.Instance.datastore.gyroZ; GyroScope.Stability stability = Hot2gApplication.Instance.datastore.stability[Hot2gApplication.Instance.datastore.stability.Count - 1]; //Debug.Log("HRTEST State:" + sF(NpodApplication.app.state.toString()) + " / State2:" + sF(NpodApplication.app.state2.toString())) int sz = 20; if (brain1.Count > sz) { bool lastStatus = isupdateActivenesses; bool cndStability = (stability == GyroScope.Stability.Stabled); //true;//stability.isStable; // 1. HbT 3cm: abs(median - mean)<3 // val cnd1 = (median(brain3.takeLast(sz)) - brain3.takeLast(sz).average()).absoluteValue < 3.0 double B3_median = median(takeLast(brain3, sz)); double B3_ave = AnalyseHelper.Average(brain3, brain3.Count - sz, brain3.Count); bool cnd1 = (Math.Abs(B3_median - B3_ave) < 3); // 2. HbT 3cm: non zero //val cnd2 = (median(brain3.takeLast(sz)) - brain3.takeLast(sz).average()).absoluteValue != 0.0 bool cnd2 = (Math.Abs(B3_median - B3_ave) != 0.0); // 3. Hb 1cm: median(v-v(1))<0.3 bool cnd3 = median(subtract(takeLast(brain1, sz), brain1[brain1.Count - sz])) < 0.3; // 4. Gyro-Z: median(v-v(1))<7 bool cnd4 = median(subtract(takeLast(gyroZ, sz), gyroZ[gyroZ.Count - sz])) < 7; // 5. 置いたままの状態を加速度から検出 bool cnd5 = sd(takeLast(gyroZ, sz)) > 0.02; isupdateActivenessesBuffer.Add(cndStability && cnd1 && cnd2 && cnd3 && cnd4 && cnd5); if (isupdateActivenessesBuffer.Count > 50) { isupdateActivenessesBuffer.RemoveAt(0); } //isupdateActivenesses = !isupdateActivenessesBuffer.takeLast(2).all { !it } if (isupdateActivenessesBuffer.Count == 1) { isupdateActivenesses = isupdateActivenessesBuffer[0]; } else { int c = isupdateActivenessesBuffer.Count - 1; isupdateActivenesses = (isupdateActivenessesBuffer[c] || isupdateActivenessesBuffer[c - 1]); } Debug.Log("HRTEST 1:" + cnd1 + " 2:" + cnd2 + " 3:" + cnd3 + " 4:" + cnd4 + " 5:" + cnd5); if (!isupdateActivenesses) /** 非装着検出! */ { /** 計測中(装着) → 非装着 */ if (Hot2gApplication.Instance.mode == Hot2gApplication.eMode.RecieveData) { Hot2gApplication.Instance.setStateToResetGain(); //- リセット後はルーチン内でWaitingに設定される Hot2gApplication.Instance.setState2ToNotOnHead(); } else if (Hot2gApplication.Instance.mode == Hot2gApplication.eMode.Waiting) { /** 非装着中 */ //Hot2gApplication.Instance.setStateToWating(); //Hot2gApplication.Instance.setState2ToNotOnHead(); } } else { if (Hot2gApplication.Instance.mode == Hot2gApplication.eMode.Waiting) /** 装着中検出 */ { /** 非装着 → 装着 */ Hot2gApplication.Instance.setStateToMGC(); Hot2gApplication.Instance.setState2ToOnHead(); } else { /** 装着中 */ Hot2gApplication.Instance.setState2ToOnHead(); } } #if false if (!isupdateActivenesses) { /** 装着 → 非装着 */ if (lastStatus) { Hot2gApplication.Instance.setStateToResetGain(); Hot2gApplication.Instance.setState2ToNotOnHead(); } else { /** 非装着中 */ Hot2gApplication.Instance.setStateToWating(); Hot2gApplication.Instance.setState2ToNotOnHead(); } } else if (!lastStatus) { /** 非装着 → 装着 */ Hot2gApplication.Instance.setStateToMGC(); Hot2gApplication.Instance.setState2ToOnHead(); } else { /** 装着中 */ Hot2gApplication.Instance.setState2ToOnHead(); } #endif } #if false /* * var heartRate = NpodApplication.app.dataStore.heartRate * * if (heartRate.takeLast(30).all { 40 <= it && it <= 180 }) { * isupdateActivenesses = true * } * if (heartRate.takeLast(50).all { it < 40 || 180 < it }) { * isupdateActivenesses = false * } */ List <double> pulseCoef = Hot2gApplication.Instance.datastore.pulseAmplitudeCoeff; List <double> brain1 = Hot2gApplication.Instance.datastore.l1Ac; List <double> brain3 = Hot2gApplication.Instance.datastore.l3Ac; Debug.Log("HRTEST\n" + pulseCoef.Count + "," + Hot2gApplication.Instance.mode.ToString()); int sz = 20; if (pulseCoef.Count > sz) { List <double> takeLast_sz = new List <double>(); List <double> takeLast_sz_brain1 = new List <double>(); List <double> takeLast_sz_brain3 = new List <double>(); for (int i = pulseCoef.Count - 20; i < pulseCoef.Count; i++) { takeLast_sz.Add(pulseCoef[i]); takeLast_sz_brain1.Add(brain1[i]); takeLast_sz_brain3.Add(brain3[i]); } bool lastStatus = isupdateActivenesses; bool cond3 = false; double c3buf = sd(takeLast_sz.ToArray()); if (2 <= c3buf && c3buf <= 1000) { cond3 = true; } Debug.Log("c3buf " + c3buf); bool cond4 = (brain1[brain1.Count - 1] != double.NaN && brain3[brain3.Count - 1] != double.NaN); bool cond5 = max(takeLast_sz_brain1) < 30.0 && max(takeLast_sz_brain3) < 30.0; //bool cond6 = (brain1[brain1.Count - 1] != 0.0 && brain3[brain3.Count - 1] != 0.0); bool cond6 = true; Debug.Log("HRTEST 3:" + cond3 + " 4:" + cond4 + " 5:" + cond5 + " 6:" + cond6); isupdateActivenesses = cond3 && cond4 && cond5 && cond6; /** 非装着時はStateをWatingにキープ */ if (!isupdateActivenesses) { Debug.Log("NotOnHead"); Hot2gApplication.Instance.setStateToWating(); Hot2gApplication.Instance.setState2ToNotOnHead(); } /** 非装着 → 装着 */ if (isupdateActivenesses && !lastStatus) { Debug.Log("Not To OnHead"); Hot2gApplication.Instance.setStateToMGC(); Hot2gApplication.Instance.setState2ToOnHead(); } /** 装着 → 非装着 */ if (!isupdateActivenesses && lastStatus) { Debug.Log("OnHead To Not"); Hot2gApplication.Instance.setStateToResetGain(); Hot2gApplication.Instance.setState2ToNotOnHead(); } } #endif }
public async Task <HttpResponseMessage> PostMessage(JObject Responce) { try { DateTime TimeToStartAnswer = DateTime.Now; FacebookResponce facebookeResponce = Responce.ToObject <FacebookResponce>(); Logging.Logger.Debug($"Facebook PostMessage message={Responce}"); if (facebookeResponce == null) { Logging.Logger.Error("Facebook. Empty request!"); return(result); } if (facebookeResponce.Object != ObjectTypes.page) { Logging.Logger.Error($"Facebook. It's not a message!"); return(result); } //long unixTimestamp = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; //if (unixTimestamp - facebookTimestamp > long.Parse(ConfigurationManager.AppSettings["TimeToNotice"])) //{ // Logging.Logger.Debug($"Faceboooook !!!! An old message occurred {unixTimestamp} sub = {unixTimestamp - facebookTimestamp}"); // return result; //} // создание объекта - Бота var FacebookBot = new FacebookApiHelper(_token); // создание объекта для логирования запроса var thisRequest = new BotUserRequest(); // подключаем главную базу var dbContextes = new List <MallBotContext>(); dbContextes.Add(new MallBotContext($"A{ConfigurationManager.AppSettings["dbTest"]}")); // Находим пользователя var botUsers = dbContextes[0].BotUser.ToList(); var stringID = facebookeResponce.entry[0].messaging[0].sender.Id.ToString(); var botUser = botUsers.FirstOrDefault(x => x.BotUserFacebookID == stringID); if (botUser == null) { dbContextes[0] = dbContextes[0].AddBotUser(SocialNetworkType.Facebook, FacebookBot, stringID); botUser = dbContextes[0].BotUser.FirstOrDefault(x => x.BotUserFacebookID == stringID); botUser.IsNewUser = true; } else { if (botUser.NowIs == MallBotWhatIsHappeningNow.SettingCustomer && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 240) { botUser.IsNewUser = true; } else { botUser.IsNewUser = false; } // если пользователь не завершил диалог с ботом и вернулся больше, чем через пол часа, то данные сбросятся к поиску организации. // кэш почистится в MainAnswerHelper if ((botUser.NowIs == MallBotWhatIsHappeningNow.SearchingWay || botUser.NowIs == MallBotWhatIsHappeningNow.GettingAllOrganizations) && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 30) { botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization; } } //проверка на актуальность сообщения long facebookTimestamp = (long)facebookeResponce.entry[0].messaging[0].timestamp / 1000; if (ConfigurationManager.AppSettings["IgnoreOldEvents"] == "Enabled" && !TimeHelper.IsNewEvent((int)facebookTimestamp, botUser.BotUserID)) { return(result); } // помечаем сообщение как прочитанное. thisRequest.IsSendingError = await FacebookBot.SendAction(facebookeResponce.entry[0].messaging[0].sender.Id, SenderActionType.typing_on); //проверяем, что сообщение не пусто var trimmedLoweredQuery = ""; if (!string.IsNullOrWhiteSpace(facebookeResponce.entry[0].messaging[0].message?.text)) { trimmedLoweredQuery = facebookeResponce.entry[0].messaging[0].message.text.ToLower().Trim(AnalyseHelper.splitters); } else { if (facebookeResponce.entry[0].messaging[0].postback != null) { trimmedLoweredQuery = facebookeResponce.entry[0].messaging[0].postback.payload; facebookeResponce.entry[0].messaging[0].message = new FacebookMessage { text = trimmedLoweredQuery }; } } if (string.IsNullOrWhiteSpace(trimmedLoweredQuery) || (facebookeResponce.entry[0].messaging[0].message?.attachments != null && facebookeResponce.entry[0].messaging[0].message?.attachments[0].type != AttachmentType.location)) //что-то непонятное пришло { var simpleAnaliser = new AnalyseHelper(); thisRequest.IsSendingError = await simpleAnaliser.AnalyseBadRequest(botUser, SocialNetworkType.Facebook, FacebookBot, dbContextes[0].BotText.ToList()); dbContextes[0].AddBotQuery(botUser, null, TimeToStartAnswer, thisRequest); return(result); } var analyser = new MainAnswerHelper(thisRequest, FacebookBot, SocialNetworkType.Facebook, botUser, dbContextes); FindedInformation answer; // если была прислана геолокация, то ищем по ней. Иначе по тексту if (facebookeResponce.entry[0].messaging[0].message?.attachments != null && facebookeResponce.entry[0].messaging[0].message?.attachments[0].type == AttachmentType.location) { botUser.InputDataType = InputDataType.GeoLocation; botUser.NowIs = MallBotWhatIsHappeningNow.SettingCustomer; var temp = $"POINT({facebookeResponce.entry[0].messaging[0].message.attachments[0].payload.coordinates.Long} {facebookeResponce.entry[0].messaging[0].message.attachments[0].payload.coordinates.lat})"; temp = temp.Replace(',', '.'); thisRequest.Text = temp; answer = await analyser.Main(DbGeography.FromText(temp)); } else { botUser.InputDataType = InputDataType.Text; thisRequest.Text = facebookeResponce.entry[0].messaging[0].message.text; answer = await analyser.Main(trimmedLoweredQuery); } //сохраняем полезные данные по юзеру botUser.LastActivityDate = DateTime.Now; dbContextes[0].SaveChanges(); //пишем в базу запрос dbContextes[0].AddBotQuery(botUser, answer, TimeToStartAnswer, thisRequest); return(result); } catch (Exception ex) { Logging.Logger.Error(ex, "Facebook"); return(result); } }
public static void select_event() { string sql = ""; //select pin website sql = "select * from a_all where a_website_id=1 and a_event_id is null"; DataTable dt_pin = SQLServerHelper.get_table(sql); foreach (DataRow row in dt_pin.Rows) { #region old method /* * sql = "select * from a_event a,a_all b where a.id=b.a_event_id and b.event_id={0} and b.a_website_id=1"; * sql = string.Format(sql, row["event_id"].ToString()); * DataTable dt_temp = SQLServerHelper.get_table(sql); * if (dt_temp.Rows.Count == 0) * { * sql = "insert into a_event (timespan,start_time,team1,team2,a_all_id) values ( {0} ,'{1}','{2}','{3}','{4}')"; * sql = string.Format(sql, UnixTime.unix_now.ToString(), row["start_time"].ToString(), row["team1"].ToString(), row["team2"].ToString(), row["id"].ToString()); * SQLServerHelper.exe_sql(sql); * * sql = "select * from a_event where a_all_id={0}"; * sql = string.Format(sql, row["id"].ToString()); * string max_id = SQLServerHelper.get_table(sql).Rows[0]["id"].ToString(); * * sql = "update a_all set a_event_id={0} where id={1}"; * sql = string.Format(sql, max_id, row["id"].ToString()); * SQLServerHelper.exe_sql(sql); * } * else * { * sql = " update a_all set a_event_id={0} where id={1}"; * sql = string.Format(sql, dt_temp.Rows[0]["a_event_id"].ToString(), row["id"].ToString()); * SQLServerHelper.exe_sql(sql); * } */ #endregion sql = "select * from a_event"; DataTable dt_time = SQLServerHelper.get_table(sql); bool is_find = false; foreach (DataRow row_time in dt_time.Rows) { if (AnalyseHelper.is_same_event(row["start_time"].ToString(), row["team1"].ToString(), row["team2"].ToString(), row["start_time"].ToString(), row_time["team1"].ToString(), row_time["team2"].ToString()) == true) { is_find = true; sql = "update a_all set a_event_id={0} where id={1} "; sql = string.Format(sql, row_time["id"].ToString(), row["id"].ToString()); SQLServerHelper.exe_sql(sql); } } if (is_find == false) { sql = "insert into a_event (timespan,start_time,team1,team2,a_all_id) values ({0},'{1}','{2}','{3}','{4}')"; sql = string.Format(sql, UnixTime.unix_now.ToString(), row["start_time"].ToString(), row["team1"].ToString(), row["team2"].ToString(), row["id"].ToString()); SQLServerHelper.exe_sql(sql); sql = "select * from a_event where a_all_id={0}"; sql = string.Format(sql, row["id"].ToString()); string max_id = SQLServerHelper.get_table(sql).Rows[0]["id"].ToString(); sql = "update a_all set a_event_id={0} where id={1}"; sql = string.Format(sql, max_id, row["id"].ToString()); SQLServerHelper.exe_sql(sql); } } //select other websites sql = "select * from a_all where a_website_id<>1 and a_event_id is null"; DataTable dt_other = SQLServerHelper.get_table(sql); foreach (DataRow row in dt_other.Rows) { sql = "select * from a_event"; DataTable dt_time = SQLServerHelper.get_table(sql); bool is_find = false; foreach (DataRow row_time in dt_time.Rows) { if (AnalyseHelper.is_same_event(row["start_time"].ToString(), row["team1"].ToString(), row["team2"].ToString(), row["start_time"].ToString(), row_time["team1"].ToString(), row_time["team2"].ToString()) == true) { is_find = true; sql = "update a_all set a_event_id={0} where id={1} "; sql = string.Format(sql, row_time["id"].ToString(), row["id"].ToString()); SQLServerHelper.exe_sql(sql); } } if (is_find == false) { sql = "insert into a_event (timespan,start_time,team1,team2,a_all_id) values ({0},'{1}','{2}','{3}','{4}')"; sql = string.Format(sql, UnixTime.unix_now.ToString(), row["start_time"].ToString(), row["team1"].ToString(), row["team2"].ToString(), row["id"].ToString()); SQLServerHelper.exe_sql(sql); sql = "select * from a_event where a_all_id={0}"; sql = string.Format(sql, row["id"].ToString()); string max_id = SQLServerHelper.get_table(sql).Rows[0]["id"].ToString(); sql = "update a_all set a_event_id={0} where id={1}"; sql = string.Format(sql, max_id, row["id"].ToString()); SQLServerHelper.exe_sql(sql); } } }
public async Task <HttpResponseMessage> PostMessage(JObject jsonResponce) { try { DateTime TimeToStartAnswer = DateTime.Now; var telegramResponce = jsonResponce.ToObject <Update>(); Logging.Logger.Debug($"Telegram PostMessage message={jsonResponce}"); if (telegramResponce == null) { Logging.Logger.Error("Telegram Empty request"); return(result); } if (telegramResponce.Type == UpdateType.MessageUpdate) { // создание объекта - Бота var TelegramBot = new Telegram.Bot.TelegramBotClient(_token); // создание объекта для логирования запроса var thisRequest = new BotUserRequest(); // подключаем главную базу var dbContextes = new List <MallBotContext>(); dbContextes.Add(new MallBotContext($"A{ConfigurationManager.AppSettings["dbTest"]}")); // Находим пользователя var botUsers = dbContextes[0].BotUser.ToList(); var stringID = telegramResponce.Message.Chat.Id.ToString(); var botUser = botUsers.FirstOrDefault(x => x.BotUserTelegramID == stringID); if (botUser == null) { dbContextes[0] = dbContextes[0].AddBotUser(SocialNetworkType.Telegram, TelegramBot, stringID, telegramResponce.Message.From.FirstName, telegramResponce.Message.From.LastName); botUser = dbContextes[0].BotUser.FirstOrDefault(x => x.BotUserTelegramID == stringID); botUser.IsNewUser = true; } else { if (botUser.NowIs == MallBotWhatIsHappeningNow.SettingCustomer && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 240) { botUser.IsNewUser = true; } else { botUser.IsNewUser = false; } // если пользователь не завершил диалог с ботом и вернулся больше, чем через пол часа, то данные сбросятся к поиску организации. // кэш почистится в MainAnswerHelper if ((botUser.NowIs == MallBotWhatIsHappeningNow.SearchingWay || botUser.NowIs == MallBotWhatIsHappeningNow.GettingAllOrganizations) && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 30) { botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization; } } //проверка на актуальность сообщения long thisTimestamp = (int)(telegramResponce.Message.Date.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; if (ConfigurationManager.AppSettings["IgnoreOldEvents"] == "Enabled" && !TimeHelper.IsNewEvent((int)thisTimestamp, botUser.BotUserID)) { return(result); } thisRequest.IsSendingError = 0; await TelegramBot.SendChatActionAsync(telegramResponce.Message.Chat.Id, ChatAction.Typing); // бот сделает вид что набирает сообщение //проверяем, что сообщение не пусто var trimmedLoweredQuery = ""; if (!string.IsNullOrWhiteSpace(telegramResponce.Message.Text)) { trimmedLoweredQuery = telegramResponce.Message.Text.ToLower().Trim(AnalyseHelper.splitters); } if (telegramResponce.Message.Text == null && telegramResponce.Message.Location == null) { var simpleAnaliser = new AnalyseHelper(); thisRequest.IsSendingError = await simpleAnaliser.AnalyseBadRequest(botUser, SocialNetworkType.Telegram, TelegramBot, dbContextes[0].BotText.ToList()); dbContextes[0].AddBotQuery(botUser, null, TimeToStartAnswer, thisRequest); return(result); } var analyser = new MainAnswerHelper(thisRequest, TelegramBot, SocialNetworkType.Telegram, botUser, dbContextes); FindedInformation answer; // если была прислана геолокация, то ищем по ней. Иначе по тексту if (telegramResponce.Message.Location != null) { botUser.InputDataType = InputDataType.GeoLocation; botUser.NowIs = MallBotWhatIsHappeningNow.SettingCustomer; var temp = $"POINT({telegramResponce.Message.Location.Longitude} {telegramResponce.Message.Location.Latitude})"; temp = temp.Replace(',', '.'); thisRequest.Text = temp; answer = await analyser.Main(DbGeography.FromText(temp)); } else { botUser.InputDataType = InputDataType.Text; thisRequest.Text = telegramResponce.Message.Text; answer = await analyser.Main(trimmedLoweredQuery); } //сохраняем полезные данные по юзеру botUser.LastActivityDate = DateTime.Now; dbContextes[0].SaveChanges(); //пишем в базу запрос dbContextes[0].AddBotQuery(botUser, answer, TimeToStartAnswer, thisRequest); return(result); } return(result); } catch (Exception ex) { Logging.Logger.Error(ex, "Telegram"); return(result); } }
public async Task <HttpResponseMessage> PostMessage(JObject jsonResponce) { var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("ok"), }; try { DateTime TimeToStartAnswer = DateTime.Now; var vkResponce = jsonResponce.ToObject <VKResponce>(); Logging.Logger.Debug($"VK PostMessage message={jsonResponce}"); if (vkResponce == null) { Logging.Logger.Error("VK Empry request"); return(result); } if (vkResponce.GroupId != 120366480 && vkResponce.GroupId != 127789119) { Logging.Logger.Error($"VK group with ID {vkResponce.GroupId} is not supporting by MOLOKO"); result.Content = new StringContent($"VK group with ID {vkResponce.GroupId} is not supporting by MOLOKO"); return(result); } if (vkResponce.Type == "confirmation") { if (vkResponce.GroupId == 120366480) { return(new HttpResponseMessage { Content = new StringContent("da3aa7a7"), }); } if (vkResponce.GroupId == 127789119) { return(new HttpResponseMessage { Content = new StringContent("38ffe9fe"), }); } } if (vkResponce.Type == "message_new") { var vkMessage = jsonResponce["object"].ToObject <VKMessage>(); // создание объекта - Бота VK vk = null; if (vkResponce.GroupId == 120366480) { var token = "af48a9fdfdb50e827c09799047c71bcb1ac8ef0f874000d1e2ba30e416735e535badacec4f0f48af3fed4"; vk = new VK(token); } else { var token = "157c278b4e80a8bcade8eab4f4c0a99e2d6bc3f6fb9f0736763e8600e3682e3a0471f126a34a52e37534e"; vk = new VK(token); } // создание объекта для логирования запроса var thisRequest = new BotUserRequest(); thisRequest.IsSendingError = 0; // помечаем сообщение как прочитанное. thisRequest.IsSendingError = AsyncHelper.RunSync(() => vk.markAsRead(vkMessage.Id));// сообщение помечено как прочитанное // подключаем главную базу var dbContextes = new List <MallBotContext>(); dbContextes.Add(new MallBotContext($"A{ConfigurationManager.AppSettings["dbTest"]}")); // Находим пользователя var botUsers = dbContextes[0].BotUser.ToList(); var botUser = botUsers.FirstOrDefault(x => x.BotUserVKID == vkMessage.UserId.ToString()); if (botUser == null) { var temp = vkMessage.UserId.ToString(); dbContextes[0] = dbContextes[0].AddBotUser(SocialNetworkType.VK, vk, temp); botUser = dbContextes[0].BotUser.FirstOrDefault(x => x.BotUserVKID == temp); botUser.IsNewUser = true; } else { if (botUser.NowIs == MallBotWhatIsHappeningNow.SettingCustomer && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 240) { botUser.IsNewUser = true; } else { botUser.IsNewUser = false; } // если пользователь не завершил диалог с ботом и вернулся больше, чем через пол часа, то данные сбросятся к поиску организации. // кэш почистится в MainAnswerHelper if ((botUser.NowIs == MallBotWhatIsHappeningNow.SearchingWay || botUser.NowIs == MallBotWhatIsHappeningNow.GettingAllOrganizations) && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 30) { botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization; } } //проверка на актуальность сообщения if (ConfigurationManager.AppSettings["IgnoreOldEvents"] == "Enabled" && !TimeHelper.IsNewEvent(vkMessage.Date, botUser.BotUserID)) { return(result); } // сборщик запросов к апи var Requests = new List <VKApiRequestModel>(); //проверяем, что сообщение не пусто var trimmedLoweredQuery = vkMessage.Body.ToLower().Trim(AnalyseHelper.splitters); if (string.IsNullOrWhiteSpace(trimmedLoweredQuery) && vkMessage.geo == null) { var simpleAnaliser = new AnalyseHelper(); thisRequest.IsSendingError = await simpleAnaliser.AnalyseBadRequest(botUser, SocialNetworkType.VK, vk, dbContextes[0].BotText.ToList(), Requests); // отправка данных во вконтаке thisRequest.IsSendingError = AsyncHelper.RunSync(() => vk.SendAllRequests(Requests)); dbContextes[0].AddBotQuery(botUser, null, TimeToStartAnswer, thisRequest); return(result); } var analyser = new MainAnswerHelper(thisRequest, vk, SocialNetworkType.VK, botUser, dbContextes, Requests); FindedInformation answer; // если была прислана геолокация, то ищем по ней. Иначе по тексту if (vkMessage.geo != null) { botUser.InputDataType = InputDataType.GeoLocation; botUser.NowIs = MallBotWhatIsHappeningNow.SettingCustomer; thisRequest.Text = vkMessage.geo.coordinates; var geo = vkMessage.geo.coordinates.Split(' '); var temp = $"POINT({geo[1]} {geo[0]})"; temp = temp.Replace(',', '.'); answer = await analyser.Main(DbGeography.FromText(temp)); } else { botUser.InputDataType = InputDataType.Text; thisRequest.Text = vkMessage.Body; answer = await analyser.Main(trimmedLoweredQuery); } // отправка данных во вконтаке thisRequest.IsSendingError = AsyncHelper.RunSync(() => vk.SendAllRequests(Requests)); //сохраняем полезные данные по юзеру botUser.LastActivityDate = DateTime.Now; dbContextes[0].SaveChanges(); //пишем в базу запрос dbContextes[0].AddBotQuery(botUser, answer, TimeToStartAnswer, thisRequest); return(result); } if (vkResponce.Type == "group_join") { return(result); } return(result); } catch (Exception ex) { Logging.Logger.Error(ex, "VK"); return(result); } }
public void bufferActiveness() { Debug.Log("1******************************************"); //装着チェックが完了していない状態でも値が帰ってきてしまう //OnHeadが、一度でもNOTになったら、バッファをクリア if (Hot2gApplication.Instance.state2 != Hot2gApplication.eState.OnHead) { buffer1.Clear(); buffer2.Clear(); buffer_breath.Clear(); return; } Debug.Log("2******************************************"); //-Gain調整中はデータを貯めずに、戻す if (Hot2gApplication.Instance.mode != Hot2gApplication.eMode.RecieveData) { return; } //データの平滑化:データバッファの中央値を代表値にする=平滑化。代表値をフィルタデータバッファに追加 int len = store.l3Ac.Count; if (len < 12) { Debug.Log("6qqq:waiting"); return; } //-------------------------------------------------------------------------------- if (type == Type.NEURO) { //ニューロフィードバックと数息 //仕様書p20の1 ①(AC_L3) – (AC_L1)をバッファ1に追加 double l3AcM = AnalyseHelper.median(sliceArray(store.l3Ac, len - sampleLength - 1, len - 1)); double l1AcM = AnalyseHelper.median(sliceArray(store.l1Ac, len - sampleLength - 1, len - 1)); if (buffer1.Count >= BUF1_MAX) { buffer1.RemoveAt(0); } //循環 buffer1.Add(l3AcM - l1AcM); } else if (type == Type.BIO) { //バイオフィードバック //Debug.Log("**** HR count" + store.heartRate.Count); //len = store.heartRate.Count; //if (len < sampleLength + 1) return; //double currentHrM = AnalyseHelper.median(sliceArray(store.heartRate, len - sampleLength - 1, len - 1)); double currentHrM = store.heartRate[store.heartRate.Count - 1]; Debug.Log("6qqq-1: " + currentHrM.ToString()); //引き算?値が1個しかないので出来ないのでそのまま if (buffer1.Count >= BUF1_MAX) { buffer1.RemoveAt(0); } buffer1.Add(currentHrM); Debug.Log("6qqq-2: " + buffer1[0]); /* * for (int i = 0; i < 6; i++) * { * if (buffer1.Count >= BUF1_MAX) { buffer1.Dequeue(); } * buffer1.Enqueue(store.pulseHRList[store.pulseHRList.Count() - 1].valConvHR_L[i]); * } */ } //-------------------------------------------------------------------------------- //仕様書p20の2 ②バッファ1の中央値をバッファ2に追加 //if (buffer1.Count >= BUF1_MAX) if (buffer1.Count >= 1) { //double _data2 = AnalyseHelper.median(buffer1.ToArray()); double _data2 = AnalyseHelper.Average80(buffer1.ToArray()); //double _data2 = buffer1[buffer1.Count-1]; if (buffer2.Count >= BUF2_MAX) { buffer2.RemoveAt(0); } //循環 buffer2.Add(_data2); buffer_breath.Add(_data2); //LF/HF用 } //デバッグ表示 if (DEBUG_MODE) { _debugText1.text = "buffer1\n"; double[] _buf1 = buffer1.ToArray(); for (int i = 0; i < _buf1.Length; i++) { _debugText1.text += "buf1[" + i + "]" + _buf1[i].ToString("F2") + "\n"; } _debugText2.text = "buffer2\n"; double[] _buf2 = buffer2.ToArray(); for (int i = 0; i < _buf2.Length; i++) { _debugText2.text += "buf2[" + i + "]" + _buf2[i].ToString("F2") + "\n"; } //_debugText3.text = "activeness:" + calcActivenessFromBuffered().ToString("F2"); _debugText3.text = "a:" + calcActivenessFromBuffered().ToString("F2") + " b:"; } }