diff --git a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/main.cpp b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/main.cpp index 7279717..7d00f01 100644 --- a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/main.cpp +++ b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/main.cpp @@ -2,36 +2,19 @@ * Action server node template for ROS2 * * Node description: - * Template action server that demonstrates action server implementation - * with goal handling, feedback publishing, and cancellation support * * Reviewed by: * Changelog: * [04-09-2025] Wessel T: Implement template */ -#include - #include "rclcpp/rclcpp.hpp" - -namespace lessons::zero::tmp { - -class NodeTemplate : public rclcpp::Node { -public: - NodeTemplate() - : Node("node_template") - { - } - -private: -}; - -} // namespace lessons::zero::template +#include "nodes/FinalGradeDeterminator.hpp" int main(int argc,char *argv[]) { rclcpp::init(argc,argv); - auto node = std::make_shared(); + auto node = std::make_shared(); rclcpp::spin(node); rclcpp::shutdown(); diff --git a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.cpp b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.cpp new file mode 100644 index 0000000..bc450e1 --- /dev/null +++ b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.cpp @@ -0,0 +1,39 @@ +#include "FinalGradeDeterminator.hpp" + +namespace assignments::one::final_grade_determinator { + +FinalGradeDeterminator::FinalGradeDeterminator() : Node("final_grade_determinator") { + + + // Create publisher for exam results + student_publisher_ = this->create_publisher("student_course_management", 10); + + // Create subscriber for adding/removing student/course combinations + exam_subscriber_ = this->create_subscription( + "exam_results", 10, + std::bind( + &ExamResultGenerator::exam_results_callback, + this, + std::placeholders::_1 + ) + ); + + exam_service_client_= this->create_client("grade_calculator_service"); +} + +void FinalGradeDeterminator::exam_results_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg){ + dataMap_[{ msg->student_name, msg->course_name}].push_back(msg->result); + if (dataMap_[{ msg->student_name, msg->course_name}].size() = PARAM) + { + + } +} + +void FinalGradeDeterminator::grade_calculator_response(rclcpp::Client::SharedFuture future){ + auto response = future.get(); + StudentCourse passthrough; + passthrough. + db_manager_->store_final_course_result() +} + +} // namespace assignments::one::final_grade_determinator diff --git a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.hpp b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.hpp new file mode 100644 index 0000000..b31a3f5 --- /dev/null +++ b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include +#include + +#include "rclcpp/rclcpp.hpp" +#include "g2_2025_interfaces/msg/exam.hpp" +#include "g2_2025_interfaces/msg/student.hpp" +#include "g2_2025_interfaces/srv/exams.hpp" + +#include "database/DatabaseManager.hpp" +#include "database/StudentCourse.hpp" + +#define PARAM 5 + +namespace assignments::one::final_grade_determinator { + +class FinalGradeDeterminator : public rclcpp::Node { +public: + FinalGradeDeterminator(); +private: + rclcpp::Subscription::SharedPtr exam_subscriber_; + rclcpp::Publisher::SharedPtr student_publisher_; + + rclcpp::Client::SharedPtr exam_service_client_; + + std::unique_ptr db_manager_; + + std::map, std::vector> dataMap_; + + + + void exam_results_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg); + void grade_calculator_response(rclcpp::Client::SharedFuture future) +}; +} // namespace assignments::one::final_grade_determinator \ No newline at end of file diff --git a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/main.cpp b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/main.cpp index 7279717..9d9080b 100644 --- a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/main.cpp +++ b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/main.cpp @@ -10,28 +10,13 @@ * [04-09-2025] Wessel T: Implement template */ -#include - #include "rclcpp/rclcpp.hpp" - -namespace lessons::zero::tmp { - -class NodeTemplate : public rclcpp::Node { -public: - NodeTemplate() - : Node("node_template") - { - } - -private: -}; - -} // namespace lessons::zero::template +#include "nodes/GradeCalculator.hpp" int main(int argc,char *argv[]) { rclcpp::init(argc,argv); - auto node = std::make_shared(); + auto node = std::make_shared(); rclcpp::spin(node); rclcpp::shutdown(); diff --git a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.cpp b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.cpp new file mode 100644 index 0000000..9d69ba3 --- /dev/null +++ b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.cpp @@ -0,0 +1,11 @@ +#include "GradeCalculator.hpp" + +namespace assignments::one::grade_calculator +{ + GradeCalculator::GradeCalculator() : Node("grade_calculator"){ + grade_calculator_serviceserver_ = this -> create_service("grade_calculator_service", + std::bind(&GradeCalculator::grade_calculator_callback,this,std::placeholders::_1,std::placeholders::_2)); + } +} // namespace assignments::one::grade_calculator + + diff --git a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.hpp b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.hpp new file mode 100644 index 0000000..c7b3c11 --- /dev/null +++ b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include +#include +#include +#include + +#include "rclcpp/rclcpp.hpp" +#include "g2_2025_interfaces/msg/exam.hpp" +#include "g2_2025_interfaces/msg/student.hpp" +#include "g2_2025_interfaces/srv/exams.hpp" + + +namespace assignments::one::grade_calculator { + +class GradeCalculator : public rclcpp::Node { +public: + GradeCalculator(); +private: + rclcpp::Service::SharedPtr grade_calculator_serviceserver_; + + void grade_calculator_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg); +}; + +} \ No newline at end of file