private static bool CheckConnection(Api bot, UserSession session) { if (session.Connection == null) bot.SendTextMessage(session.UserId, "Выполните подключение к базе данных"); else return true; return false; }
private static void SetTask(UserSession session, Action action) { var task = session.CurrentTask; if (task == null) session.CurrentTask = Task.Run(action); else task.ContinueWith(_ => action()); }
private static void DisconnectTask(Api bot, UserSession session) { if (CheckConnection(bot, session)) { session.Connection.Disconnect(); session.Connection = null; if (userSessions.ContainsKey(session.UserId)) userSessions.Remove(session.UserId); bot.SendTextMessage(session.UserId, "Отключение соединения выполнено успешно"); } }
private static UserSession GetUserSession(int userId) { if (userSessions.ContainsKey(userId)) return userSessions[userId]; else { var session = new UserSession() { UserId = userId }; userSessions.Add(userId, session); return session; } }
private static void ConnectTask(Api bot, UserSession session, string userName, string userPass) { if (session.Connection != null) session.Connection.Disconnect(); else session.Connection = new Loodsman(); try { session.Connection.Connect(userName, userPass); bot.SendTextMessage(session.UserId, "Подключение выполнено успешно"); } catch (COMException) { bot.SendTextMessage(session.UserId, "Ошибка соединения с базой данных"); } }
private static void ProjectsTask(Api bot, UserSession session) { if (CheckConnection(bot, session)) { try { var rootObj = session.Connection.ProjectList(); bot.SendTextMessage(session.UserId, "Список проектов:" + Environment.NewLine + rootObj.Childs.ToStringEx()); session.CurrentObject = rootObj; } catch (COMException) { bot.SendTextMessage(session.UserId, "Ошибка при получении списка проектов"); } } }
private static void FileTask(Api bot, UserSession session, string fileName) { if (CheckConnection(bot, session)) { if (session.CurrentObject == null) bot.SendTextMessage(session.UserId, "Не выбран объект"); else { var file = session.CurrentObject.Files.Find(f => f.Name.Equals(fileName, StringComparison.InvariantCultureIgnoreCase)); if (file == null) bot.SendTextMessage(session.UserId, "Файл не найден"); else try { var fileFullName = session.Connection.GetFile(session.CurrentObject, file); var ext = Path.GetExtension(fileName); using (FileStream fs = new FileStream(fileFullName, FileMode.Open, FileAccess.Read)) { Task<Message> task; // Отправим фото if (new[] { ".jpg", ".jpeg", ".gif", ".tif", ".bmp" }.Contains(ext)) task = bot.SendPhoto(session.UserId, new FileToSend(fileName, fs), fileName, 0, new ReplyKeyboardHide() { HideKeyboard = true }); else task = bot.SendDocument(session.UserId, new FileToSend(fileName, fs), 0, new ReplyKeyboardHide() { HideKeyboard = true }); task.Wait(); } } catch (COMException) { bot.SendTextMessage(session.UserId, "Ошибка при получении файла", false, 0, new ReplyKeyboardHide() { HideKeyboard = true }); } } } }
private static void FileTask(Api bot, UserSession session) { if (CheckConnection(bot, session)) { if (session.CurrentObject == null) bot.SendTextMessage(session.UserId, "Не выбран объект"); else if (session.CurrentObject.Files.Count == 0) bot.SendTextMessage(session.UserId, "У объекта нет файлов"); else { bot.SendTextMessage(session.UserId, "Выберите файл", false, 0, new ReplyKeyboardMarkup() { Keyboard = session.CurrentObject.Files.ToKeyboard(), ResizeKeyboard = true, OneTimeKeyboard = true }); } } }
private static void ObjectTask(Api bot, UserSession session, string objProduct) { if (CheckConnection(bot, session) && session.CurrentObject != null) { try { var obj = session.CurrentObject.Childs.Find(o => o.Product.Equals(objProduct, StringComparison.InvariantCultureIgnoreCase)); if (obj == null) bot.SendTextMessage(session.UserId, "Объект не найден"); else { session.CurrentObject = obj; var attrs = session.Connection.Attributes(obj); if (attrs.Count() > 0) bot.SendTextMessage(session.UserId, "Атрибуты объекта:" + Environment.NewLine + string.Join(Environment.NewLine, attrs), false, 0, new ReplyKeyboardHide() { HideKeyboard = true }); session.Connection.FileList(obj); if (obj.Files.Count > 0) bot.SendTextMessage(session.UserId, "Файлы объекта:" + Environment.NewLine + obj.Files.ToStringEx(), false, 0, new ReplyKeyboardHide() { HideKeyboard = true }); if (attrs.Count() == 0 && obj.Files.Count == 0) bot.SendTextMessage(session.UserId, "У объекта нет атрибутов и файлов", false, 0, new ReplyKeyboardHide() { HideKeyboard = true }); } } catch (COMException) { bot.SendTextMessage(session.UserId, "Ошибка при получении информации об объекте", false, 0, new ReplyKeyboardHide() { HideKeyboard = true }); } } }
private static void ObjectTask(Api bot, UserSession session) { if (CheckConnection(bot, session)) { try { LoodsmanObject curObj = session.Connection.ChildList(session.CurrentObject); if (curObj.Childs.Count == 0) bot.SendTextMessage(session.UserId, "Не найдено объектов"); else bot.SendTextMessage(session.UserId, "Выберите объект", false, 0, new ReplyKeyboardMarkup() { Keyboard = curObj.Childs.ToKeyboard(), ResizeKeyboard = true, OneTimeKeyboard = true }); session.CurrentObject = curObj; } catch (COMException) { bot.SendTextMessage(session.UserId, "Ошибка при получении списка объектов"); } } }