Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
76 changes: 76 additions & 0 deletions vacancy_server/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
cmake_minimum_required(VERSION 3.9)
project(vacancy-server)

set(CMAKE_CXX_STANDARD 11)

set(TBB_DIR lib/tbb)
include(cmake/TBBGet.cmake)
tbb_get(TBB_ROOT tbb_root CONFIG_DIR TBB_DIR)
find_package(TBB)

MACRO(ADD_MSVC_PRECOMPILED_HEADER PrecompiledHeader PrecompiledSource SourcesVar)
IF(MSVC)
GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE)
SET(PrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/${PrecompiledBasename}.pch")
SET(Sources ${${SourcesVar}})

SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource}
PROPERTIES COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
OBJECT_OUTPUTS "${PrecompiledBinary}")
SET_SOURCE_FILES_PROPERTIES(${Sources}
PROPERTIES COMPILE_FLAGS "/Yu\"${PrecompiledHeader}\" /FI\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
OBJECT_DEPENDS "${PrecompiledBinary}")
# Add precompiled header to SourcesVar
LIST(APPEND ${SourcesVar} ${PrecompiledSource})
ENDIF(MSVC)
ENDMACRO(ADD_MSVC_PRECOMPILED_HEADER)

ADD_MSVC_PRECOMPILED_HEADER(${PROJECT_NAME} "pch.h" "src/pch.cpp")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}\
-pthread\
-Werror\
-Wall\
-Wextra\
-Winit-self\
-Wold-style-cast\
-Woverloaded-virtual\
-Winit-self\
-pedantic-errors\
-Wuninitialized\
-Wuseless-cast\
-Woverloaded-virtual\
-Wnon-virtual-dtor\
-Wconversion\
-Wtrigraphs\
-Wlogical-op\
-Wfloat-equal\
-Wstrict-overflow=4\
-fsanitize=leak\
-fsanitize=undefined\
-fomit-frame-pointer\
")

add_executable(
${PROJECT_NAME}
src/main.cpp

src/server.cpp
src/vacancy.cpp
src/speciality.cpp

src/network/socket_exception.cpp
src/network/server_socket.cpp
src/network/client_socket.cpp

src/util/user_view.cpp
)

target_link_libraries(${PROJECT_NAME} ${TBB_IMPORTED_TARGETS})

target_include_directories(
${PROJECT_NAME}
PRIVATE ${PROJECT_SOURCE_DIR}/lib
PUBLIC ${PROJECT_SOURCE_DIR}/include

)
99 changes: 99 additions & 0 deletions vacancy_server/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Протокол для обмена сообщениями в системе "Vacancy service"

## Общие замечания

Все запросы и ответы передаются в формате _json_. Общий вид всех сообщений:
- 4 байта -- размер сообщения (без учёта этих 4-х байт). `uint_32` в формате _little endian_.
- Строка -- тело сообщения в формате _json_

В случае, если во время обработки запроса происходит ошибка (`success != 0`), сервер отвечает стандартным ответом с ошибкой.

## Описание запросов и ответов

### Добавление специальности

#### Запрос

- `uint32_t requestType = 1`
- `string speciality` -- название специализации

#### Ответ

- `int success = 0`

---

### Добавление вакансии

#### Запрос

- `uint32_t requestType = 2`
- `VacancyInfo vacancy`

Где `VacancyInfo`:
- `int32_t specialityId`
- `string company`
- `string position` (должность)
- `int32_t minAge`
- `int32_t maxAge`
- `int32_t salary`

#### Ответ

- `int success = 0`
- `uint32_t id` (id новой вакансии)

---

### Удаление вакансии

#### Запрос

- `uint32_t requestType = 3`
- `uint32_t id`

#### Ответ

- `int success = 0`

---

### Список специальностей

#### Запрос

- `uint32_t requestType = 4`

#### Ответ

- `int success = 0`
- `[SpecialityInfo] specialities`

Где `SpecialityInfo`:
- `uint32_t id`
- `string speciality`

---

### Список вакансий

#### Запрос

В данном запросе все занчения по-умолчанию (кроме поля `requestType`) означают, что пользователь не ввёл данные для этого поля

- `uint32_t requestType = 5`
- `int32_t specialityId = -1`
- `int32_t age = -1`
- `int32_t salary = -1`

#### Ответ

- `int success = 0`
- `[VacancyInfo] vacancies`

---

### Ответ с ошибкой

- `int success != 0`
- `string cause`
Loading