Files
2022-07-29 12:48:08 +05:00

90 lines
1.7 KiB
C++

#include "session.h"
#include <vector>
#include <algorithm>
#include <iostream>
#pragma once
class sessionManager
{
private:
std::vector<session> sessions;
uint32_t limit = 0;
public:
bool add(session s)
{
if (isLimitReached())
return false;
sessions.push_back(s);
return true;
}
void remove(uint32_t id)
{
for (uint32_t i = 0; i < sessions.size(); ++i)
if (sessions[i].getId() == id)
sessions.erase(sessions.begin() + i);
}
bool getById(uint32_t id, session** s)
{
for (int i = 0; i < sessions.size(); ++i)
if (sessions[i].getId() == id)
{
*s = &(*(sessions.begin() + i));
return true;
}
return false;
}
bool existsOwnerIp(std::string ip)
{
for (auto& s : sessions)
if (s.getOwnerIp() == ip)
return true;
return false;
}
bool existsOwnerId(uint32_t id)
{
for (auto& s : sessions)
if (s.getOwnerId() == id)
return true;
return false;
}
size_t getCount() { return sessions.size(); }
void setlimit(uint32_t limit) { this->limit = limit; }
bool isLimitReached()
{
return limit == sessions.size();
}
uint16_t getMinPort(uint16_t desired)
{
// working not properly
if (!sessions.size())
return desired;
std::vector<uint16_t> ports;
for (auto& s : sessions)
ports.push_back(s.getPort());
std::cout << "amount: " << ports.size() << std::endl;
std::cout << "ports: " << std::endl;
for (auto& s : ports)
std::cout << s << ", ";
std::cout << std::endl;
std::sort(ports.begin(), ports.end(), [](uint16_t a, uint16_t b) { return a < b; });
uint16_t port = desired;
for (auto p : ports)
{
if (desired != p)
return desired;
++desired;
}
return ports.back() + 1;
}
};