gabirel1 / epitech-principe-financier-de-base-et-architecture Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
Create a Selector
to choose between any OrderBook
available server side.
Test every functionnality of the OrderBook
.
Create unit or functional test for the whole solution, targeting in priority the crucial part.
Add to the interface a section to send Order
with this elements:
Selector
): choose between Ask
or Bid
.NumericInput
): quantity of the order.NumericInput
): quantity of the order.Button
): action to save and send the Order
to the server.It will display a small text to signal error
Make an interface to modify an Order
made by the user:
NumericInput
): target the OrderId
.NumericInput
): new Quantity
to set.NumericInput
): new Price
to set.Button
): action to save and send the Order
modification to the server.The header of any fix
request is verify only by the function fix::Header::Verify
, but it doesn't verify the actual value of the different field.
Verfiy this field:
TargetCompId
: verify that's the one of the user or the one of the serverSenderCompId
: same as TargetCompId
BodyLenght
: compare it to the actual body lenght receivedCheckSum
: verify it's match the calculated one on the requestThe Market
must order action or the OrderBook
due of the multithreading on previous the pipelines (Serializer
, Action
) with the seqNum
from the FIX
protocol.
Use an std::queue
to store action with a seqNum
higher than the actual Market
seqNum await.
Create interface object using SFML
to simplify the develepoment:
Button
: simple button taking a sf::Texture
or a std::string
to be display, triggering a callback function.Selector
: multiple choice selector.Input
: a box where you can input any type of character.NumericInput
: an input taking only numeric input.AlphaInput
: an input taking only alphabetic input.
NumericInput
andAlphaInput
should be based onInput
Being able to set the name of any std::thread
contained by ThreadPool
.
Manage the TCP
connection to receive and send request (certainly implementing the system of Pipeline
?) and connect them to the UI.
Add the documentation over the whole project.
Reference all the advancement on the document with the pull request in the comment under this issue.
Management of the FIX protocol action:
Logon
(A):Logout
(5):NewOrder
(D):OrderCancelReplaceRequest
(G):OrderCancelRequest
(9):The different action need a global and short description and could change some pipeline behavior
Manage the UDP
connection to receive and send request and connect them to the UI.
Fix all warning on the whole solution (mostly error handling return).
Create unit test on the fix::Message
serializer and deserializer using gtest
When a c::Socket
or an abstraction (net::Socket
, net::tcp::Socket
, net::Acceptor<T>
,...) is close by any way (from the connected service or by the actual solution), the programme crash with a:
Segmentation fault (core dumped)
Create an object to display the OrderBook
separating Ask
and Bid
:
Table
: object to display column and row with Price
and Quantity
dynamically.Verify each log to detail the behavior of the whole solution.
Create more micromanagement on the status of each Pipeline
in the main thread.
When adding a bid when taking their is an higher ask, it never sell.
Because we use a template function (add<T>
) to manage the OrderBook
bid and ask, the condition when exiting the while is wrong when the order type is Ask
:
for (auto &[_key, _val] : _book) {
if (_key > _price) // this condition is wrong
break;
OrderList &ol = _book.at(_key);
Full code here
The actual reason of this behavior is because we use 2 differents sorting algorithm for BidBook
and AskBook
:
using AskBook = std::map<Price, OrderList, std::greater<Price>>;
using BidBook = std::map<Price, OrderList, std::less<Price>>;
ref here
Add to the interface a section to cancel Order
place by the client:
NumericInput
): of the Order
to cancel.Button
): action to save and send the cancel to the server.Connect a client
--> LOGON
---> NEW ORDER
---> WAIT FOR CLIENT 2 ORDER FILL
---> TEST FAIL -> SOCKET.CLOSE() without LOGOUT
CLIENT 2 --> LOGON ---> NEW ORDER --> LOGOUT
CLIENT 2 --> BLOCKED at sending logout
--> Cannot send / connect to the server anymore
HOW TO REPRODUCE:
BLOCKING_TEST.py
BLOCKING_TEST2.py
Create a Pipeline
to handle every error send over the whole solution and send them to the OutNetwork
.
Add the document for each pipeline (refered with the namespace pip
) and the core Pipeline
.
Implementation of the 2 UDP pipeline
, to broadcast change on the OrderBook
:
UDP input
: let any socket to connect to the server, when a message is receive disconnect then client.UDP output
: broadcast the change on the OrderBook
to every client connected via the UDP input
The format of the data send need to be determined
Management of the FIX protocol action:
ExecutionReport
(8):MarketDataSnapshotFullRefresh
(W):MarketDataIncrementalRefresh
(X):The different action need a global and short description and could change some pipeline behavior
Make the server able to manage multiple OrderBook
and Action
pipeline.
The server is think to allow this with minimum impact on other pipeline behavior.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.