# tzadiko/marketdatasimulator architecture

> Architecture diagram of the GitHub repository tzadiko/marketdatasimulator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tzadiko/marketdatasimulator
- Repository: https://github.com/tzadiko/marketdatasimulator

## Overview

This is a simulated market-data order-book service with a console client. The user enters an instrument subscription; the client streams it to the server, which returns an initial snapshot and then incremental updates, rendered by the client. Server configuration creates per-instrument books, whose simulated updates feed the streaming service. The graph reflects sampled runtime code and the documented protocol; no README content or source for unsampled modules was available to verify further behavior.

Main entry points: [`Common/Server/OrderbookService.cs`](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Server/OrderbookService.cs) (gRPC service), [`Server/Orderbook.cs`](https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Orderbook.cs) (Simulated orderbook), [`Common/Client/Client.cs`](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Client/Client.cs) (Client stream), [`Server/Server.cs`](https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Server.cs) (Orderbook manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Console Client"]
  node_cli["Command loop<br/>[Program.cs]"]
  node_clientlib["Client stream<br/>[Client.cs]"]
end

subgraph group_server["Market Server"]
  node_config["Server config"]
  node_entry["Server entry<br/>[Program.cs]"]
  node_manager["Orderbook manager<br/>[Server.cs]"]
end

subgraph group_stream["Streaming Protocol"]
  node_service["gRPC service"]
  node_serverclient["Client stream state<br/>[ServerClient.cs]"]
  node_adapter["Protocol adapter<br/>[Adapter.cs]"]
  node_proto["Stream schema<br/>[orderbook.proto]"]
end

subgraph group_domain["Orderbook Domain"]
  node_book["Simulated orderbook<br/>[Orderbook.cs]"]
  node_comparer["Level comparer"]
  node_instrument["Instrument settings<br/>[Instrument.cs]"]
  node_models["Update models<br/>[OrderbookUpdate.cs]"]
  node_level["Orderbook level<br/>[OrderbookLevel.cs]"]
  node_managercontract["Manager contract"]
end

node_user(("Terminal user"))
node_grpc{{"gRPC network"}}

node_user -->|"enters commands"| node_cli
node_cli -->|"calls subscribe"| node_clientlib
node_entry -->|"loads settings"| node_config
node_entry -->|"starts server"| node_manager
node_config -->|"configures books"| node_manager
node_manager -->|"creates service"| node_service
node_manager -->|"creates books"| node_book
node_manager -->|"implements"| node_managercontract
node_book -->|"uses specifications"| node_instrument
node_book -->|"sorts levels"| node_comparer
node_book -->|"publishes updates"| node_service
node_book -->|"builds updates"| node_models
node_book -->|"maintains levels"| node_level
node_service -->|"requests snapshots"| node_managercontract
node_service -->|"tracks and sends"| node_serverclient
node_service -->|"queues updates"| node_models
node_serverclient -->|"encodes levels"| node_adapter
node_clientlib -->|"decodes updates"| node_adapter
node_clientlib -->|"streams requests"| node_grpc
node_grpc -->|"dispatches stream"| node_service
node_service -->|"streams responses"| node_grpc
node_clientlib -->|"uses schema"| node_proto
node_service -->|"implements schema"| node_proto
node_adapter -->|"maps messages"| node_proto
node_clientlib -->|"prints updates"| node_cli

click node_cli "https://github.com/tzadiko/marketdatasimulator/blob/master/Client/Program.cs"
click node_clientlib "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Client/Client.cs"
click node_config "https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Configuration/ServerConfiguration.cs"
click node_entry "https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Program.cs"
click node_manager "https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Server.cs"
click node_book "https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Orderbook.cs"
click node_comparer "https://github.com/tzadiko/marketdatasimulator/blob/master/Server/OrderbookLevelComparer.cs"
click node_instrument "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Instrument.cs"
click node_models "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/OrderbookUpdate.cs"
click node_level "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/OrderbookLevel.cs"
click node_managercontract "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/IOrderbookManager.cs"
click node_service "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Server/OrderbookService.cs"
click node_serverclient "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Server/ServerClient.cs"
click node_adapter "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Protos/Adapter.cs"
click node_proto "https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Protos/orderbook.proto"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_clientlib,node_user toneBlue
class node_config,node_entry,node_manager toneAmber
class node_service,node_serverclient,node_adapter,node_proto toneMint
class node_book,node_comparer,node_instrument,node_models,node_level,node_managercontract toneRose
class node_grpc toneIndigo
```

## Components

### Console Client

- [Command loop](https://github.com/tzadiko/marketdatasimulator/blob/master/Client/Program.cs): `Client/Program.cs`
- [Client stream](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Client/Client.cs): `Common/Client/Client.cs`

### Market Server

- [Server config](https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Configuration/ServerConfiguration.cs): `Server/Configuration/ServerConfiguration.cs`
- [Server entry](https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Program.cs): `Server/Program.cs`
- [Orderbook manager](https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Server.cs): `Server/Server.cs`

### Streaming Protocol

- [gRPC service](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Server/OrderbookService.cs): `Common/Server/OrderbookService.cs`
- [Client stream state](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Server/ServerClient.cs): `Common/Server/ServerClient.cs`
- [Protocol adapter](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Protos/Adapter.cs): `Common/Protos/Adapter.cs`
- [Stream schema](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Protos/orderbook.proto): `Common/Protos/orderbook.proto`

### Orderbook Domain

- [Simulated orderbook](https://github.com/tzadiko/marketdatasimulator/blob/master/Server/Orderbook.cs): `Server/Orderbook.cs`
- [Level comparer](https://github.com/tzadiko/marketdatasimulator/blob/master/Server/OrderbookLevelComparer.cs): `Server/OrderbookLevelComparer.cs`
- [Instrument settings](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/Instrument.cs): `Common/Instrument.cs`
- [Update models](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/OrderbookUpdate.cs): `Common/OrderbookUpdate.cs`
- [Orderbook level](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/OrderbookLevel.cs): `Common/OrderbookLevel.cs`
- [Manager contract](https://github.com/tzadiko/marketdatasimulator/blob/master/Common/IOrderbookManager.cs): `Common/IOrderbookManager.cs`

### Other components

- **Terminal user**
- **gRPC network**

## Connections

- Terminal user → Command loop: enters commands
- Command loop → Client stream: calls subscribe
- Server entry → Server config: loads settings
- Server entry → Orderbook manager: starts server
- Server config → Orderbook manager: configures books
- Orderbook manager → gRPC service: creates service
- Orderbook manager → Simulated orderbook: creates books
- Orderbook manager → Manager contract: implements
- Simulated orderbook → Instrument settings: uses specifications
- Simulated orderbook → Level comparer: sorts levels
- Simulated orderbook → gRPC service: publishes updates
- Simulated orderbook → Update models: builds updates
- Simulated orderbook → Orderbook level: maintains levels
- gRPC service → Manager contract: requests snapshots
- gRPC service → Client stream state: tracks and sends
- gRPC service → Update models: queues updates
- Client stream state → Protocol adapter: encodes levels
- Client stream → Protocol adapter: decodes updates
- Client stream → gRPC network: streams requests
- gRPC network → gRPC service: dispatches stream
- gRPC service → gRPC network: streams responses
- Client stream → Stream schema: uses schema
- gRPC service → Stream schema: implements schema
- Protocol adapter → Stream schema: maps messages
- Client stream → Command loop: prints updates
