Skip to content

Sun1tAr/Pet-WorkTimeManager-BackEnd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyManager - TimeTracker Service

MyManager — это Java-приложение для отслеживания рабочего времени с поддержкой распределённой архитектуры на основе UDP-коммуникации.

📋 Описание

Проект представляет собой систему управления рабочим временем, которая позволяет:

  • Отслеживать рабочий день — фиксировать начало и конец рабочего периода
  • Регистрировать перерывы — автоматически учитывать время обеда
  • Вычислять итоги — получать общее отработанное время за день
  • Обмениваться командами — взаимодействовать через сетевые сообщения (UDP)
  • Перенаправлять пакеты — система автоматически перенаправляет сообщения, предназначенные другим адресатам

🏗️ Архитектура

Основные компоненты

1. Сетевой слой (ru.proj3ct5.network)

  • Subscriber — слушатель входящих UDP-пакетов

    • Использует pcap4j для захвата сетевых пакетов на уровне ОС
    • Фильтрует пакеты по портам
    • Перенаправляет чужие сообщения
    • Сохраняет входящие сообщения в очередь
  • Publisher — отправитель UDP-пакетов

    • Создаёт UDP-сокет
    • Отправляет сериализованные сообщения
  • Message — модель сообщения с встроенной сериализацией

    • Поля: sender, receiver, data
    • Формат: {length}:{receiver}:{data}:{sender}
    • Использует паттерн Builder для удобного создания

2. Слой обработки времени (ru.proj3ct5.service.timeTracker)

  • WorkDay — управляет состоянием рабочего дня

    • Отслеживает работу (start → end)
    • Управляет обедом (start → end)
    • Вычисляет итоговое время работы
    • Имеет 4 статуса: не начат (0), работает (1), обед (2), завершён (3)
  • WorkTime — представляет интервал времени

    • Фиксирует стартовое и финальное время
    • Вычисляет продолжительность периода
  • TimeProcessor — утилита для расчётов времени

    • Вычисляет разницу между временами
    • Агрегирует несколько временных интервалов

3. Обработчики команд (ru.proj3ct5.settings)

  • Handler — абстрактный класс для обработки сообщений

    • Запускает отдельный поток для прослушивания сообщений
    • Десериализует входящие команды
    • Вызывает executeCommand() при получении новых сообщений
  • TimeTrackerHandler — конкретная реализация

    • Обрабатывает команды: startWork, endWork, startDinner, endDinner, getTime, getStatus, newDay, STOP
    • Управляет жизненным циклом WorkDay
    • Сохраняет данные в БД (TODO)
  • Configurator — загружает конфигурацию из файла

    • Читает IP и PORT из config.properties

4. Пользовательский интерфейс (ru.proj3ct5.service)

  • GUI — командный интерфейс
    • startSimpleGUI() — локальный режим (прямое управление WorkDay)
    • startRemoteGUI() — удалённый режим (отправка команд через UDP)

🔄 Поток выполнения

Main
  ↓
1. Инициализация логирования (Log4j)
  ↓
2. Запуск Subscriber (слушатель UDP-пакетов)
  ↓
3. Создание TimeTrackerHandler
  ↓
4. Handler.process() → запуск отдельного потока обработки сообщений
  ↓
5. GUI.startRemoteGUI() → интерактивное меню в консоли
  ↓
Пользователь выбирает действие → GUI создаёт Message → Publisher отправляет
  ↓
Subscriber получает сообщение → Handler.executeCommand() → WorkDay.metod()
  ↓
Результат выводится в консоль

💬 Команды

Команда Действие
startWork Начать рабочий день
endWork Завершить рабочий день
startDinner Начать перерыв на обед
endDinner Завершить обед
getTime Получить отработанное время за день
getStatus Получить текущий статус
newDay Начать новый день (сохранить текущий)
STOP Остановить сервис

🛠️ Технологический стек

Зависимости

Зависимость Версия Назначение
JDK 17 Язык программирования
Lombok 1.18.30 Генерация getter'ов, логирования
SLF4J 1.7.30 Фасад для логирования
Log4j 1.2.17 Реализация логирования
pcap4j 1.8.2 Захват и обработка сетевых пакетов
JUnit Jupiter 5.11.4 Фреймворк для тестирования

Требования к ОС

  • Windows (проект использует пути C:\Windows\System32\Npcap)
  • Установленный Npcap (или WinPcap)

⚙️ Конфигурация

config.properties

PORT=12345
IP=127.0.0.1

Путь: src/main/resources/config.properties

log4j.properties

Пример конфигурации логирования находится в: src/main/resources/log4j.properties

🚀 Запуск

Предварительные требования

  1. Java 17+
  2. Maven
  3. Npcap (для захвата пакетов)

Сборка

mvn clean package

Запуск

java -cp target/MyManager-1.0-SNAPSHOT.jar ru.proj3ct5.Main

📊 Примеры использования

Локальный режим (startSimpleGUI)

0 - Выход
1 - Начать РД
2 - Закончить РД
3 - Начать обед
4 - Закончить обед
5 - Время
-----------------------------
> 1
Работа начата!

> 3
Обед начат!

> 4
Обед завершён!

> 2
Работа завершена!
Отработано: 08:30:00

> 0
Выход

Удалённый режим (startRemoteGUI)

0 - Выход
1 - Начать РД
2 - Закончить РД
3 - Начать обед
4 - Закончить обед
5 - Время
6 - Новый день
-----------------------------
> 1
Message sent successfully

> 5
Message sent successfully
# На сервере отрабатывает команда getTime
# Результат выводится в консоль сервера

> 0
Message sent successfully
Service TimeTracker stopped

🔐 Особенности

  • Многопоточность — каждый компонент работает в отдельном потоке
  • Сериализованные сообщения — безопасный обмен данными
  • Автоматическое перенаправление — система перенаправляет пакеты, не предназначенные для себя
  • Асинхронная обработка — команды обрабатываются в фоновом потоке
  • Синхронизированный доступ — использование synchronized для безопасности потоков

About

Система отслеживания рабочего времени с распределённой архитектурой на UDP

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages