public override async Task <UpdateHandlingResult> HandleCommand(Update update) { var teacher = teachers.GetTeachersNames() .FirstOrDefault(x => x == update.CallbackQuery.Data); if (teacher != null) { teacherSelector.TeacherName = teacher; var teacherSchedule = await scheduleService.CompileScheduleWithSelector(teacherSelector); if (teacherSchedule.ScheduleRoot.Level == ScheduleElemLevel.Week) { await Bot.Client.SendTextMessageAsync( update.CallbackQuery.Message.Chat.Id, teacher); await Bot.Client.AnswerCallbackQueryAsync(update.CallbackQuery.Id, teacher); foreach (var daySchedule in teacherSchedule.ScheduleRoot.Elems.Cast <Day>()) { await SendDay(daySchedule); await Task.Delay(200); } } else if (teacherSchedule.ScheduleRoot.Level == ScheduleElemLevel.Day) { await Bot.Client.SendTextMessageAsync( update.CallbackQuery.Message.Chat.Id, teacher); await Bot.Client.AnswerCallbackQueryAsync(update.CallbackQuery.Id, teacher); await SendDay((Day)teacherSchedule.ScheduleRoot); } else { await Bot.Client.SendTextMessageAsync( update.CallbackQuery.Message.Chat.Id, "Пар нет", replyMarkup : keyboards.GetMainOptionsKeyboard()); } } else { await Bot.Client.SendTextMessageAsync( update.CallbackQuery.Message.Chat.Id, "Нет такого преподавателя.", replyMarkup : keyboards.GetMainOptionsKeyboard()); } return(UpdateHandlingResult.Handled); async Task SendDay(Day day) { var answer = CustomSerializator.ProcessSchedule(day.Elems.OfType <Lesson>(), day.DayOfWeek); await Bot.Client.SendTextMessageAsync( update.CallbackQuery.Message.Chat.Id, answer, ParseMode.Html, replyMarkup : keyboards.GetMainOptionsKeyboard()); } }
internal static byte[] ConvertValue(object data, Type td) { if (data == null) return null; //Type td = typeof(TData); Func<object, byte[]> f = null; if (dcv.TryGetValue(td, out f)) return f(data); if (td.Name == "DbMJSON`1" || td.Name == "DbCustomSerializer`1" || td.Name == "DbXML`1") return ((IDBConvertable)((object)data)).GetBytes(); if (td == TYPE_OBJECT) throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); if (td.GetTypeInfo().IsEnum) { var enumtype = Enum.GetUnderlyingType(td); if (dce.TryGetValue(enumtype, out f)) return f(data); throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } //Trying byte serialization for unknown object, in case if byte serializer is set if (CustomSerializator.ByteArraySerializator != null) return CustomSerializator.ByteArraySerializator(data); throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); }
public override async Task <UpdateHandlingResult> HandleCommand(Update update, DefaultCommandArgs args) { var userGroups = await Storage.GetGroupsForChatAsync(update.Message.Chat); if (userGroups != null) { var weekSchedule = await Scheduler.GetScheduleForAsync(userGroups, ScheduleRequiredFor.Week); foreach (var daySchedule in weekSchedule.ScheduleRoot.Elems.Cast <Day>()) { var answer = CustomSerializator.ProcessSchedule(daySchedule.Elems.Cast <Lesson>(), daySchedule.DayOfWeek); await Bot.Client.SendTextMessageAsync( update.Message.Chat.Id, answer, ParseMode.Html); Thread.Sleep(200); } } else { await Bot.Client.SendTextMessageAsync( update.Message.Chat.Id, "А группа?"); } return(UpdateHandlingResult.Handled); }
/// <summary> /// CONVERTING FROM byte[] to the generic type /// </summary> /// <typeparam name="TData"></typeparam> /// <param name="dt"></param> /// <returns></returns> public static TData ConvertBack <TData>(byte[] dt) { if (dt == null) { return(default(TData)); } Type td = typeof(TData); Func <byte[], object> f = null; if (dcb.TryGetValue(td, out f)) { return((TData)f(dt)); } if (td.Name.Equals("DbMJSON`1") || td.Name.Equals("DbCustomSerializer`1") || td.Name.Equals("DbXML`1")) { object o = Activator.CreateInstance(td); ((IDBConvertable)o).SetBytes(dt); return((TData)o); } if (td == TYPE_OBJECT) { throw DBriizeException.Throw(DBriizeException.eDBriizeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } if (td.GetTypeInfo().IsEnum) { var enumtype = Enum.GetUnderlyingType(td); if (dcbe.TryGetValue(enumtype, out f)) { return((TData)f(dt)); } throw DBriizeException.Throw(DBriizeException.eDBriizeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } if (CustomSerializator.ByteArrayDeSerializator != null) { return((TData)CustomSerializator.ByteArrayDeSerializator(dt, td)); } throw DBriizeException.Throw(DBriizeException.eDBriizeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); }
protected async Task <UpdateHandlingResult> HandleCommandForPeriod(Update update, DefaultCommandArgs args, ScheduleRequiredFor period) { if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday && period == ScheduleRequiredFor.Today || DateTime.Today.DayOfWeek == DayOfWeek.Saturday && period == ScheduleRequiredFor.Tomorrow) { await Bot.Client.SendTextMessageAsync(update.Message.Chat.Id, "Выходной день 😃"); return(UpdateHandlingResult.Handled); } var userGroups = await Storage.GetGroupsForChatAsync(update.Message.Chat); if (userGroups != null) { var schedule = await Scheduler.GetScheduleForAsync(userGroups, period); if (schedule.ScheduleRoot.Level == ScheduleElemLevel.Undefined) { await Bot.Client.SendTextMessageAsync(update.Message.Chat.Id, "Пар нет 😃"); return(UpdateHandlingResult.Handled); } var answer = CustomSerializator.ProcessSchedule(schedule.ScheduleRoot.Elems.Cast <Lesson>(), ((Day)schedule.ScheduleRoot).DayOfWeek); await Bot.Client.SendTextMessageAsync( update.Message.Chat.Id, answer, ParseMode.Html); } else { await Bot.Client.SendTextMessageAsync( update.Message.Chat.Id, "А группа?"); } return(UpdateHandlingResult.Handled); }
/// <summary> /// CONVERTING FROM byte[] to the generic type /// </summary> /// <typeparam name="TData"></typeparam> /// <param name="dt"></param> /// <returns></returns> public static TData ConvertBack <TData>(byte[] dt) { //OPT all to switch case if (dt == null) { return(default(TData)); } Type td = typeof(TData); if (td == TYPE_BYTE_ARRAY) { return((TData)((object)dt)); } else if (td == TYPE_ULONG) { return((TData)((object)dt.To_UInt64_BigEndian())); } else if (td == TYPE_ULONG_NULL) { return((TData)((object)dt.To_UInt64_BigEndian_NULL())); } else if (td == TYPE_DATETIME) { return((TData)((object)dt.To_DateTime())); } else if (td == TYPE_DATETIME_NULL) { return((TData)((object)dt.To_DateTime_NULL())); } else if (td == TYPE_STRING) { return((TData)((object)(new DbUTF8(dt)).Get)); } else if (td.Name.Equals("DbMJSON`1") || td.Name.Equals("DbCustomSerializer`1") || td.Name.Equals("DbXML`1")) { object o = Activator.CreateInstance(td); ((IDBConvertable)o).SetBytes(dt); return((TData)o); } else if (td == TYPE_UINT) { return((TData)((object)dt.To_UInt32_BigEndian())); } else if (td == TYPE_UINT_NULL) { return((TData)((object)dt.To_UInt32_BigEndian_NULL())); } else if (td == TYPE_DECIMAL) { return((TData)((object)(dt.To_Decimal_BigEndian()))); } else if (td == TYPE_DECIMAL_NULL) { return((TData)((object)(dt.To_Decimal_BigEndian_NULL()))); } else if (td == TYPE_INT) { return((TData)((object)dt.To_Int32_BigEndian())); } else if (td == TYPE_INT_NULL) { return((TData)((object)dt.To_Int32_BigEndian_NULL())); } else if (td == TYPE_DOUBLE) { return((TData)((object)(dt.To_Double_BigEndian()))); } else if (td == TYPE_DOUBLE_NULL) { return((TData)((object)(dt.To_Double_BigEndian_NULL()))); } else if (td == TYPE_FLOAT) { return((TData)((object)(dt.To_Float_BigEndian()))); } else if (td == TYPE_FLOAT_NULL) { return((TData)((object)(dt.To_Float_BigEndian_NULL()))); } else if (td == TYPE_LONG) { return((TData)((object)dt.To_Int64_BigEndian())); } else if (td == TYPE_LONG_NULL) { return((TData)((object)dt.To_Int64_BigEndian_NULL())); } else if (td == TYPE_SHORT) { return((TData)((object)dt.To_Int16_BigEndian())); } else if (td == TYPE_SHORT_NULL) { return((TData)((object)dt.To_Int16_BigEndian_NULL())); } else if (td == TYPE_USHORT) { return((TData)((object)dt.To_UInt16_BigEndian())); } else if (td == TYPE_USHORT_NULL) { return((TData)((object)dt.To_UInt16_BigEndian_NULL())); } else if (td == TYPE_DB_ASCII) { //checked return((TData)((object)new DbAscii(dt))); } else if (td == TYPE_DB_UNICODE) { //checked return((TData)((object)new DbUnicode(dt))); } else if (td == TYPE_DB_UTF8) { //checked return((TData)((object)new DbUTF8(dt))); } else if (td == TYPE_BYTE) { return((TData)((object)dt.To_Byte())); } else if (td == TYPE_BYTE_NULL) { return((TData)((object)dt.To_Byte_NULL())); } else if (td == TYPE_SBYTE) { return((TData)((object)dt.To_SByte())); } else if (td == TYPE_SBYTE_NULL) { return((TData)((object)dt.To_SByte_NULL())); } else if (td == TYPE_BOOL) { return((TData)((object)dt.To_Bool())); } else if (td == TYPE_BOOL_NULL) { return((TData)((object)dt.To_Bool_NULL())); } else if (td == TYPE_CHAR) { return((TData)((object)dt.To_Char())); } else if (td == TYPE_CHAR_NULL) { return((TData)((object)dt.To_Char_NULL())); } else if (td == TYPE_GUID) { return((TData)((object)new Guid(dt))); } else if (td == TYPE_OBJECT) { throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } else if (td.GetTypeInfo().IsEnum) { var enumtype = Enum.GetUnderlyingType(td); if (enumtype == TYPE_INT) { return((TData)((object)dt.To_Int32_BigEndian())); } else if (enumtype == TYPE_LONG) { return((TData)((object)dt.To_Int64_BigEndian())); } else if (enumtype == TYPE_UINT) { return((TData)((object)dt.To_UInt32_BigEndian())); } else if (enumtype == TYPE_ULONG) { return((TData)((object)dt.To_UInt64_BigEndian())); } else if (enumtype == TYPE_USHORT) { return((TData)((object)dt.To_UInt16_BigEndian())); } else if (enumtype == TYPE_SHORT) { return((TData)((object)dt.To_Int16_BigEndian())); } else if (enumtype == TYPE_BYTE) { return((TData)((object)dt.To_Byte())); } else if (enumtype == TYPE_SBYTE) { return((TData)((object)dt.To_SByte())); } else { throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } } else { //Trying byte deserialization for unknown object, in case if byte serializer is set if (CustomSerializator.ByteArrayDeSerializator != null) { return((TData)CustomSerializator.ByteArrayDeSerializator(dt, td)); } throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } //return default(TData); }
//static Type TYPE_DBINTABLE = typeof(DbInTable); ////Slower then original //public static byte[] ConvertValue<TData>(TData data) //{ // //byte[] ret = null; // if (data == null) // return null; // Type td = typeof(TData); // string std = td.ToString(); // try // { // switch (td.Name) // { // case "DbMJSON`1": // case "DbCustomSerializer`1": // case "DbXML`1": // return ((IDBConvertable)((object)data)).GetBytes(); // } // switch (std) // { // case "System.Byte[]": // return ((byte[])((object)data)); // case "System.UInt64": // case "System.Nullable`1[System.UInt64]": // return ((ulong)((object)data)).To_8_bytes_array_BigEndian(); // case "System.DateTime": // case "System.Nullable`1[System.DateTime]": // return ((ulong)(((DateTime)((object)data)).Ticks)).To_8_bytes_array_BigEndian(); // case "System.String": // return new DbUTF8((string)((object)data)).GetBytes(); // case "System.UInt32": // case "System.Nullable`1[System.UInt32]": // return ((uint)((object)data)).To_4_bytes_array_BigEndian(); // case "System.Decimal": // case "System.Nullable`1[System.Decimal]": // return ((decimal)((object)data)).To_15_bytes_array_BigEndian(); // case "System.Double": // case "System.Nullable`1[System.Double]": // return ((double)((object)data)).To_9_bytes_array_BigEndian(); // case "System.Single": // case "System.Nullable`1[System.Single]": // return ((float)((object)data)).To_4_bytes_array_BigEndian(); // case "System.Int32": // case "System.Nullable`1[System.Int32]": // return ((int)((object)data)).To_4_bytes_array_BigEndian(); // case "System.Int64": // case "System.Nullable`1[System.Int64]": // return ((long)((object)data)).To_8_bytes_array_BigEndian(); // case "System.Int16": // case "System.Nullable`1[System.Int16]": // return ((short)((object)data)).To_2_bytes_array_BigEndian(); // case "System.UInt16": // case "System.Nullable`1[System.UInt16]": // return ((ushort)((object)data)).To_2_bytes_array_BigEndian(); // case "DBreeze.DataTypes.DbAscii": // return ((DbAscii)((object)data)).GetBytes(); // case "DBreeze.DataTypes.DbUnicode": // return ((DbUnicode)((object)data)).GetBytes(); // case "DBreeze.DataTypes.DbUTF8": // return ((DbUTF8)((object)data)).GetBytes(); // case "System.Byte": // case "System.Nullable`1[System.Byte]": // return new byte[] { ((byte)((object)data)) }; // case "System.SByte": // case "System.Nullable`1[System.SByte]": // return ((sbyte)((object)data)).To_1_byte_array(); // case "System.Boolean": // case "System.Nullable`1[System.Boolean]": // return ((bool)((object)data)).To_1_byte_array(); // } // throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); // } // catch (Exception ex) // { // throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE_VALUE, String.Concat(td.ToString(), " ", data.ToString()), ex); // } // //return ret; //} public static byte[] ConvertValue <TData>(TData data) { byte[] ret = null; if (data == null) { return(null); } Type td = typeof(TData); try { if (td == TYPE_BYTE_ARRAY) { ret = ((byte[])((object)data)); } else if (td.Name == "DbMJSON`1" || td.Name == "DbCustomSerializer`1" || td.Name == "DbXML`1") { return(((IDBConvertable)((object)data)).GetBytes()); } else if (td == TYPE_ULONG) { ret = ((ulong)((object)data)).To_8_bytes_array_BigEndian(); } else if (td == TYPE_ULONG_NULL) { ret = ((ulong?)((object)data)).To_9_bytes_array_BigEndian(); } else if (td == TYPE_DATETIME) { ret = ((DateTime)((object)data)).To_8_bytes_array(); } else if (td == TYPE_DATETIME_NULL) { ret = ((DateTime?)((object)data)).To_9_bytes_array(); } else if (td == TYPE_STRING) { ret = new DbUTF8((string)((object)data)).GetBytes(); } else if (td == TYPE_UINT) { ret = ((uint)((object)data)).To_4_bytes_array_BigEndian(); } else if (td == TYPE_UINT_NULL) { ret = ((uint?)((object)data)).To_5_bytes_array_BigEndian(); } else if (td == TYPE_DECIMAL) { ret = ((decimal)((object)data)).To_15_bytes_array_BigEndian(); } else if (td == TYPE_DECIMAL_NULL) { ret = ((decimal?)((object)data)).To_16_bytes_array_BigEndian(); } else if (td == TYPE_DOUBLE) { ret = ((double)((object)data)).To_9_bytes_array_BigEndian(); } else if (td == TYPE_DOUBLE_NULL) { ret = ((double?)((object)data)).To_10_bytes_array_BigEndian(); } else if (td == TYPE_FLOAT) { ret = ((float)((object)data)).To_4_bytes_array_BigEndian(); } else if (td == TYPE_FLOAT_NULL) { ret = ((float?)((object)data)).To_5_bytes_array_BigEndian(); } else if (td == TYPE_INT) { ret = ((int)((object)data)).To_4_bytes_array_BigEndian(); } else if (td == TYPE_INT_NULL) { ret = ((int?)((object)data)).To_5_bytes_array_BigEndian(); } else if (td == TYPE_LONG) { ret = ((long)((object)data)).To_8_bytes_array_BigEndian(); } else if (td == TYPE_LONG_NULL) { ret = ((long?)((object)data)).To_9_bytes_array_BigEndian(); } else if (td == TYPE_SHORT) { ret = ((short)((object)data)).To_2_bytes_array_BigEndian(); } else if (td == TYPE_SHORT_NULL) { ret = ((short?)((object)data)).To_3_bytes_array_BigEndian(); } else if (td == TYPE_USHORT) { ret = ((ushort)((object)data)).To_2_bytes_array_BigEndian(); } else if (td == TYPE_USHORT_NULL) { ret = ((ushort?)((object)data)).To_3_bytes_array_BigEndian(); } else if (td == TYPE_DB_ASCII) { ret = ((DbAscii)((object)data)).GetBytes(); } else if (td == TYPE_DB_UNICODE) { ret = ((DbUnicode)((object)data)).GetBytes(); } else if (td == TYPE_DB_UTF8) { ret = ((DbUTF8)((object)data)).GetBytes(); } else if (td == TYPE_BYTE) { ret = ((byte)((object)data)).To_1_byte_array(); } else if (td == TYPE_BYTE_NULL) { ret = ((byte?)((object)data)).To_2_byte_array(); } else if (td == TYPE_SBYTE) { ret = ((sbyte)((object)data)).To_1_byte_array(); } else if (td == TYPE_SBYTE_NULL) { ret = ((sbyte?)((object)data)).To_2_byte_array(); } else if (td == TYPE_BOOL) { ret = ((bool)((object)data)).To_1_byte_array(); } else if (td == TYPE_BOOL_NULL) { ret = ((bool?)((object)data)).To_1_byte_array(); } else if (td == TYPE_CHAR) { ret = ((char)((object)data)).To_2_byte_array(); } else if (td == TYPE_CHAR_NULL) { ret = ((char?)((object)data)).To_3_byte_array(); } else if (td == TYPE_GUID) { ret = ((Guid)((object)data)).ToByteArray(); } else if (td == TYPE_OBJECT) { throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } else if (td.GetTypeInfo().IsEnum) { var enumtype = Enum.GetUnderlyingType(td); if (enumtype == TYPE_INT) { ret = ((int)((object)data)).To_4_bytes_array_BigEndian(); } else if (enumtype == TYPE_LONG) { ret = ((long)((object)data)).To_8_bytes_array_BigEndian(); } else if (enumtype == TYPE_UINT) { ret = ((uint)((object)data)).To_4_bytes_array_BigEndian(); } else if (enumtype == TYPE_ULONG) { ret = ((ulong)((object)data)).To_8_bytes_array_BigEndian(); } else if (enumtype == TYPE_USHORT) { ret = ((ushort)((object)data)).To_2_bytes_array_BigEndian(); } else if (enumtype == TYPE_SHORT) { ret = ((short)((object)data)).To_2_bytes_array_BigEndian(); } else if (enumtype == TYPE_BYTE) { ret = ((byte)((object)data)).To_1_byte_array(); } else if (enumtype == TYPE_SBYTE) { ret = ((sbyte)((object)data)).To_1_byte_array(); } else { throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } } else { //Trying byte serialization for unknown object, in case if byte serializer is set if (CustomSerializator.ByteArraySerializator != null) { return(CustomSerializator.ByteArraySerializator(data)); } throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null); } } catch (Exception ex) { throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE_VALUE, String.Concat(td.ToString(), " ", data.ToString()), ex); } return(ret); }