Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
e642f98
getting started
AndreySmirdin Feb 5, 2019
5cf9cc2
Update README.md
oquechy Feb 5, 2019
10f00bd
add message class
oquechy Feb 7, 2019
a83eb6a
Update README.md
AndreySmirdin Feb 8, 2019
145984b
Update README.md
AndreySmirdin Feb 8, 2019
5b64a9c
Server is pretty great now.
AndreySmirdin Feb 8, 2019
7535f04
Merge remote-tracking branch 'origin/roulette' into roulette
AndreySmirdin Feb 8, 2019
06ad625
Closing listening socket.
AndreySmirdin Feb 8, 2019
a6b5e0d
remove success type and build with cmake
oquechy Feb 10, 2019
cfbc44f
client
oquechy Feb 10, 2019
90ec30c
a bug with 0 bets
AndreySmirdin Feb 10, 2019
e1db3df
safely writing 2 socket
AndreySmirdin Feb 10, 2019
92fcf9d
logging new connections
AndreySmirdin Feb 10, 2019
3cbb26e
architecture is great again
AndreySmirdin Feb 10, 2019
15ccc29
fix prompt
oquechy Feb 10, 2019
d098c95
bug with zero
AndreySmirdin Feb 10, 2019
7808551
Closing sockets on server
AndreySmirdin Feb 10, 2019
772fdec
logging leaves
AndreySmirdin Feb 10, 2019
09be2c6
handle client request to exit
oquechy Feb 11, 2019
51e10f8
Merge remote-tracking branch 'origin/roulette' into roulette
oquechy Feb 11, 2019
d9009ee
created include folders
AndreySmirdin Feb 11, 2019
c02985d
Can remove players now
AndreySmirdin Feb 11, 2019
37d0dcd
revert tcp_template
oquechy Feb 11, 2019
12b1578
Update README.md
oquechy Feb 12, 2019
4b79512
Update README.md
oquechy Feb 12, 2019
be0caa4
fix sscanf of two numbers
oquechy Feb 12, 2019
ad74ac1
Merge remote-tracking branch 'origin/roulette' into roulette
oquechy Feb 12, 2019
067e8e7
market readme
oquechy Feb 17, 2019
8d94fcf
new msg types
AndreySmirdin Feb 18, 2019
e1d9aa9
Updated readme
AndreySmirdin Feb 18, 2019
bebeaf6
Client implementation
AndreySmirdin Feb 18, 2019
04313aa
server authorization
oquechy Feb 19, 2019
f8ba097
added fucking return
AndreySmirdin Feb 19, 2019
c5e9b3f
add customer writer
oquechy Feb 19, 2019
5ec178a
remove duplicate customer constructor
oquechy Feb 19, 2019
c25c415
some client bugs
AndreySmirdin Feb 19, 2019
5d556ee
fixed typo
AndreySmirdin Feb 19, 2019
e6ffa96
return for each switch
AndreySmirdin Feb 19, 2019
7af4106
check before give order
oquechy Feb 19, 2019
2ea22ec
Merge remote-tracking branch 'origin/market' into market
oquechy Feb 19, 2019
33e3f58
clean up memory in message
oquechy Feb 19, 2019
2e3930a
added delitions
AndreySmirdin Feb 19, 2019
4ed5632
deleted queues
AndreySmirdin Feb 19, 2019
48a2460
simpified output
AndreySmirdin Feb 19, 2019
5e502cc
removed boost
AndreySmirdin Feb 19, 2019
dda95bd
added new lines
AndreySmirdin Feb 19, 2019
c5cdd38
fixed access to orders map on server
oquechy Feb 19, 2019
1d2cb86
fixed incorrect case
AndreySmirdin Feb 20, 2019
b24545a
fix CMakeLists and README
oquechy Mar 23, 2019
8e91964
fix boost linking in CMakeLists
oquechy Mar 23, 2019
34e5893
remove multiple while loops
oquechy Mar 26, 2019
0f3fd15
use std::lock_guard instead of direct locking
oquechy Mar 26, 2019
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
163 changes: 162 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,162 @@
# Networks Lab 2019 (Higher School of Economics)
# Зависимости
- Boost 1.058.00

# Протокол общения на бирже фрилансеров

## Формат сообщений

Для передачи численных значений используется тип `uint32_t`, далее обозначаемый как `int`. Порядок байт big endian, что контролируется функцией `htons`.

+--------------------+--------------------+-------------+
| int message type | int body length | char[] body |
+--------------------+--------------------+-------------+

## Клиент

- Запрос на вход заказчика

type: 100
body: "Name"

- Запрос на вход фрилансера

type: 200
body: "Name"

Следующие команды доступны только после авторизации пользователя с помощью одной из двух предыдущих команд.

- Добавление заказа от заказчика

type: 300
body: "Description"

- Вывод списка заказов определённого заказчика с их статусами

type: 400

- Вывод всех открытых заказов

type: 500

- Заявка от фрилансера на выполнение заказа

type: 600
body: "task_id"

- Утверждение заявки заказчиком

type: 700
body: "task_id name"

- Начало выполнения работы фрилансером

type: 800
body: "task_id"

- Конец выполнения работы фрилансером

type: 900
body: "task_id"

- Принятие работы заказчиком

type: 1000
body: "task_id"

## Сервер

- Ответ на сообщение от неавторизованного пользователя

type: 1
body: "Optional message"

- Отчёт о получении некорректного сообщения

type: 2
body: "Optional message"

- Отчёт о добавлении заказчика

type: 101
body: ""

- Отчёт о том, что заказчик не был добавлен

type: 102
body: "Reason"

- Отчёт о добавлении фрилансера

type: 201
body: ""

- Отчёт о том, что фрилансер не был добавлен

type: 202
body: "Reason"

- Добавлен заказ от заказчика

type: 301
body: "task_id"

- Вывод списка заказов определённого заказчика с их статусами

type: 401
body: "<task_id description status names>*>

- Список всех открытых заказов

type: 501
body: "<task_id description name?>*"

- Принятние заявки фрилансера на выполнение

type: 601
body: "task_id"

- Отклонение заявки фрилансера на выполнение

type: 602
body: "task_id Reason"

- Заявка успешно подтверждена заказчиком

type: 701
body: "task_id"

- Отклонение подтверждения заявки

type: 702
body: "task_id Reason"

- Начало выполнения фрилансером работы принято

type: 801
body: "task_id"

- Ответ на некорректное сообщение о начале работы

type: 802
body: "task_id Reason"

- Конец выполнения фрилансером работы зафиксирован

type: 901
body: "task_id"

- Ответ на некорректное сообщение о завершении работы

type: 902
body: "task_id Reason"

- Отчёт об успешном принятии работы заказчиком

type: 1001
body: "task_id"

- Ответ на некорректное сообщение о принятии готового заказа

type: 1002
body: "task_id Reason"

9 changes: 9 additions & 0 deletions tcp/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.13)
project(market)

set(CMAKE_CXX_STANDARD 17)
find_package(Threads REQUIRED)

add_subdirectory (client)
add_subdirectory (message)
add_subdirectory (server)
Empty file removed tcp/client/.gitkeep
Empty file.
8 changes: 8 additions & 0 deletions tcp/client/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.13)
project(client)

set(CMAKE_CXX_STANDARD 17)
find_package(Boost REQUIRED COMPONENTS thread)

add_executable(client src/main.cpp src/client.cpp include/client.h)
target_link_libraries(client LINK_PUBLIC message)
63 changes: 63 additions & 0 deletions tcp/client/include/client.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#ifndef MARKET_CLIENT_H
#define MARKET_CLIENT_H


#include <cstdint>
#include <shared_mutex>
#include <map>
#include <thread>
#include <../include/message.h>

class MarketClient {
public:

bool StartClient(const char *host, uint16_t port_number);

private:

int sockfd_;

Message SendMessage(Message::Type type);

Message SendMessage(Message::Type type, const std::string& text);

public:
bool AuthoriseCustomer(const std::string& name);

bool AuthoriseFreelancer(const std::string& name);

void ListMyOrders();

void ListOpenOrders();

void NewOrder(const std::string& description);

void RequestOrder(int order_id);

void StartOrder(int order_id);

void FinishOrder(int order_id);

void GiveOrder(int order_id, const std::string& name);

void ApproveDoneOrder(int order_id);

void HandleIncorrectMessage(const Message &response);

void HandleUnauthorised();

void HandleUnexpectedServerResponse(const Message &response);

void HandleResponse(const Message &response);

void Quit();

void PrintHeader(const std::string &header);

void PrintPrompt();

bool GetLine(std::string &message);
};


#endif //MARKET_CLIENT_H
Loading