示例#1
0
    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);
    }
示例#2
0
    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);
        }
    }
示例#3
0
    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));
    }
示例#4
0
    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);
    }
示例#5
0
    /**
     * 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
    }
示例#6
0
        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);
            }
        }
示例#7
0
    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);
            }
        }
    }
示例#8
0
        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);
            }
        }
示例#9
0
        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);
            }
        }
示例#10
0
    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:";
        }
    }