Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
bc1cb0b
Delete all extra classes
veirfuna Apr 15, 2020
9557d52
Add gitignore to project
veirfuna Apr 15, 2020
860a28b
Create class Acceptor to make mock tests
veirfuna Apr 15, 2020
de5bcc4
add file with mock tests
veirfuna Apr 15, 2020
bd29362
change CMakeLists to work with Acceptor and GMock
veirfuna Apr 15, 2020
290fd43
add empty class Server
veirfuna Apr 15, 2020
4f3aa6f
Change Acceptors functions
veirfuna Apr 15, 2020
10b48d3
Change T for AcceptorType
veirfuna Apr 15, 2020
a9dd6c8
Add class Connection for communicating between clien and server
veirfuna Apr 15, 2020
c35c4ac
Add ConnectioManager to manage clients connection
veirfuna Apr 15, 2020
5aa32a5
Add tests for ConnectionManager
veirfuna Apr 15, 2020
1eeaeea
Add RequestHandler class to handler client's requests
veirfuna Apr 15, 2020
14a46e0
Modify connection
veirfuna Apr 15, 2020
ccf6bc0
Function handleRequest non-virtual now
veirfuna Apr 17, 2020
995a8f4
Add test for connection's start
veirfuna Apr 17, 2020
63fd2c7
Delete extra cpp files
veirfuna Apr 17, 2020
08dd92f
Add argument to function handleRequest
veirfuna Apr 17, 2020
14e4a8e
Add empty class RoomScheduler
veirfuna Apr 17, 2020
9f14735
Delete RequestHandler.cpp and add realization to hpp file
veirfuna Apr 17, 2020
f77ea90
Add RequestHandler's tests
veirfuna Apr 17, 2020
35f6292
Forget to delete RequestHandler from CMakeLists
veirfuna Apr 17, 2020
5d3446a
Add boost asio to cmake
veirfuna May 17, 2020
b901f4c
Change acceptor and split up acceptor mock test
veirfuna May 17, 2020
8f45057
Fix tab
veirfuna May 17, 2020
9f92998
Add property endpoint to Acceptor and change some methods
veirfuna May 17, 2020
6334d5e
Change method setOption
veirfuna May 17, 2020
37bf281
Add property ioService to Server
veirfuna May 17, 2020
f01d9a9
For readability
veirfuna May 17, 2020
0473abc
Add properties to Server
veirfuna May 17, 2020
1d7d9f8
Add bind func to Acceptor
veirfuna May 17, 2020
63813b7
Add method to take boost acceptor from class acceptor co call async_a…
veirfuna May 18, 2020
82fecd9
Add acceptHandler to server and change Connection
veirfuna May 18, 2020
6286487
Add implementation of ConnectionManager class
veirfuna May 19, 2020
42aa89f
Change func handle_read. Now it parses request and display field "val…
veirfuna May 23, 2020
78a5623
Check method type and return json in response
veirfuna May 23, 2020
f6df40f
Add server start to main
veirfuna May 25, 2020
a33dc8b
Add lib json.hpp to convert json to string and to parse json
veirfuna May 26, 2020
cfa338d
MVP
veirfuna Jun 3, 2020
26d5c7b
Add mock tests
veirfuna Jun 5, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Prerequisites
*.d

# Object files
*.o
*.ko
*.obj
*.elf

# Linker output
*.ilk
*.map
*.exp

# Precompiled Headers
*.gch
*.pch

# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

# Debug files
*.dSYM/
*.su
*.idb
*.pdb

# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf

# macOS files
.DS_Store

# build folder
/build
32 changes: 22 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
cmake_minimum_required(VERSION 3.11)
cmake_minimum_required(VERSION 3.13)
project(TextShareServer)

project(CodeShare)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror=pedantic")
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")

include_directories(project/headers)

enable_testing()
set(SOURCE_DIR project/src/)

set(LIB_SOURCE_FILES
${SOURCE_DIR}Server.cpp
${SOURCE_DIR}Connection.cpp
${SOURCE_DIR}RequestHandler.cpp
)

add_library(project_lib STATIC ${LIB_SOURCE_FILES})

add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
add_executable(TextShareServer ${SOURCE_DIR}main.cpp)

find_package(Boost 1.72.0 COMPONENTS system)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
endif()

add_executable(CodeShare project/src/main.cpp
project/src/ChatRoom.cpp project/headers/ChatRoom.h
project/src/RoomManager.cpp project/headers/RoomManager.h
project/src/MongoConnector.cpp project/headers/MongoConnector.h)
target_link_libraries(TextShareServer project_lib ${Boost_LIBRARIES})

add_subdirectory(project/tests)
27 changes: 0 additions & 27 deletions project/headers/ChatRoom.h

This file was deleted.

60 changes: 60 additions & 0 deletions project/headers/Connection.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#ifndef PROJECT_INCLUDE_CONNECTION_H_
#define PROJECT_INCLUDE_CONNECTION_H_

template<class RoomSchedulerType>
class RequestHandler;

class RoomScheduler;

#include <iostream>
#include <utility>
#include <queue>
#include <boost/asio.hpp>
#include <boost/filesystem.hpp>

#include "json.hpp"
#include "MsgContext.h"
#include "ConnectionManager.h"
#include "RequestHandler.h"

using boost::asio::ip::tcp;
using json = nlohmann::json;
typedef std::pair<int,int> symbolId;

class Connection : public std::enable_shared_from_this<Connection> {
public:
explicit Connection(tcp::socket socket);

int getId() const;

void setRoomId(int id);

int getRoomId() const;

void start(int editorId);

void stop();

void deliver(const MsgContext& msg);

private:
int id;
int roomId;
tcp::socket socket;
MsgContext messageBuffer;
std::queue<MsgContext> messageQueue;
std::string messageBody;
std::shared_ptr<RequestHandler<RoomScheduler>> requestHandler;

virtual void readHeader();

virtual void readBody();

virtual void writeClient();

void sendMsg(const std::string& response);

void sendMsgAll(const std::string& response, const int& clientId);
};

#endif // PROJECT_INCLUDE_CONNECTION_H_
65 changes: 65 additions & 0 deletions project/headers/ConnectionManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#ifndef PROJECT_INCLUDE_CONNECTION_MANAGER_H_
#define PROJECT_INCLUDE_CONNECTION_MANAGER_H_

#include <iostream>
#include <set>

#include "MsgContext.h"
#include "Connection.h"

template<class ConnectionType>
class ConnectionManager {
public:
static ConnectionManager& getInstance() {
static ConnectionManager instance;
return instance;
}

void start(std::shared_ptr<ConnectionType> connection, int clientId);

void stop(std::shared_ptr<ConnectionType> connection);

void stopAll();

void sendMsgAllExceptMe(MsgContext message, int clientId);

ConnectionManager(ConnectionManager const&) = delete;

void operator=(ConnectionManager const&) = delete;
private:
ConnectionManager() = default;
std::set<std::shared_ptr<ConnectionType>> connections;
};

template<class ConnectionType>
void ConnectionManager<ConnectionType>::start(std::shared_ptr<ConnectionType> connection, int clientId) {
std::cout << "start in ConManager" << std::endl;
connections.insert(connection);
connection->start(clientId);
}

template<class ConnectionType>
void ConnectionManager<ConnectionType>::stop(std::shared_ptr<ConnectionType> connection) {
connection->stop();
connections.erase(connection);
}

template<class ConnectionType>
void ConnectionManager<ConnectionType>::stopAll() {
for (auto connection : connections) {
connection->stop();
}
connections.clear();
}

template<class ConnectionType>
void ConnectionManager<ConnectionType>::sendMsgAllExceptMe(MsgContext message, int clientId) {
for (const auto& connection: connections) {
if (connection->getId() == clientId) {
continue;
}
connection->deliver(message);
}
}

#endif // PROJECT_INCLUDE_CONNECTION_MANAGER_H_
28 changes: 0 additions & 28 deletions project/headers/MongoConnector.h

This file was deleted.

Loading