# sashabilenko9-glitch/encryptedmessenger architecture

> Architecture diagram of the GitHub repository sashabilenko9-glitch/encryptedmessenger, 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/sashabilenko9-glitch/encryptedmessenger
- Repository: https://github.com/sashabilenko9-glitch/encryptedmessenger

## Overview

EncryptedMessenger is a Windows LAN peer-to-peer messenger: users add or discover contacts, establish encrypted peer sessions, exchange messages and receipts, and retain local contacts and history. The WPF app talks to the shared MessengerService through a named pipe, or starts that service in-process when no Windows Service is available. The service coordinates peer networking, discovery, storage and UI notifications. The graph follows documented capabilities where implementation excerpts are incomplete; some internal event wiring and UI command details were not sampled.

Main entry points: [`EncryptedMessenger.Core/Services/MessengerService.cs`](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Services/MessengerService.cs) (Messenger orchestrator), [`EncryptedMessenger.Core/Network/MessengerClient.cs`](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/MessengerClient.cs) (TCP peer client), [`EncryptedMessenger.Core/Encryption/CryptoManager.cs`](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Encryption/CryptoManager.cs) (Crypto manager), [`EncryptedMessenger.Core/Database/ContactRepository.cs`](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Database/ContactRepository.cs) (Contact and message repositories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop interface"]
  node_wpf["WPF app<br/>[App.xaml.cs]"]
  node_views["Chat and settings UI<br/>[Views]"]
  node_viewmodels["UI view models<br/>[ViewModels]"]
  node_pipeclient["Pipe client<br/>[PipeClient.cs]"]
end

subgraph group_runtime["Service runtime"]
  node_worker["Service worker<br/>[MessengerWorker.cs]"]
  node_service["Messenger orchestrator"]
  node_pipeserver["Pipe server<br/>[PipeServer.cs]"]
  node_settings["App settings<br/>[AppSettings.cs]"]
end

subgraph group_peer["Peer communication"]
  node_discovery["Peer discovery<br/>[PeerDiscovery.cs]"]
  node_tcpserver["TCP listener<br/>[MessengerServer.cs]"]
  node_tcpclient["TCP peer client<br/>[MessengerClient.cs]"]
  node_packet["Packet framing<br/>[PacketHelper.cs]"]
end

subgraph group_security["Encryption"]
  node_crypto["Crypto manager<br/>[CryptoManager.cs]"]
  node_rsa["RSA key exchange"]
  node_aes["AES content crypto"]
end

subgraph group_persistence["Local persistence"]
  node_repositories["Contact and message repositories"]
  node_messages["Message repository"]
  node_database[("SQLite database<br/>[AppDbContext.cs]")]
  node_contacts["Contact records<br/>[Contact.cs]"]
  node_message["Message records<br/>[Message.cs]"]
end

node_user(("Messenger user"))
node_lanpeers(("LAN peers"))

node_user -->|"uses"| node_views
node_views -->|"invokes"| node_viewmodels
node_wpf -->|"creates"| node_viewmodels
node_viewmodels -->|"sends requests"| node_pipeclient
node_pipeclient -->|"exchanges JSON"| node_pipeserver
node_wpf -.->|"starts standalone"| node_service
node_worker -->|"starts"| node_service
node_service -->|"loads"| node_settings
node_service -->|"starts"| node_pipeserver
node_service -->|"starts optionally"| node_discovery
node_service -->|"starts"| node_tcpserver
node_service -->|"reads and updates contacts"| node_repositories
node_service -->|"saves and queries history"| node_messages
node_service -->|"connects and sends"| node_tcpclient
node_service -->|"broadcasts updates"| node_pipeserver
node_discovery -->|"UDP broadcast"| node_lanpeers
node_lanpeers -->|"peer announcements"| node_discovery
node_lanpeers -->|"TCP messages"| node_tcpserver
node_tcpclient -->|"TCP messages"| node_lanpeers
node_tcpclient -->|"frames packets"| node_packet
node_tcpserver -->|"frames packets"| node_packet
node_tcpclient -->|"encrypts and decrypts"| node_crypto
node_crypto -->|"exchanges session keys"| node_rsa
node_crypto -->|"encrypts content"| node_aes
node_repositories -->|"reads and writes"| node_database
node_messages -->|"reads and writes"| node_database
node_repositories -->|"stores"| node_contacts
node_messages -->|"stores"| node_message

click node_wpf "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.WPF/App.xaml.cs"
click node_views "https://github.com/sashabilenko9-glitch/encryptedmessenger/tree/main/EncryptedMessenger.WPF/Views"
click node_viewmodels "https://github.com/sashabilenko9-glitch/encryptedmessenger/tree/main/EncryptedMessenger.WPF/ViewModels"
click node_pipeclient "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/IPC/PipeClient.cs"
click node_worker "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.WindowsService/MessengerWorker.cs"
click node_service "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Services/MessengerService.cs"
click node_pipeserver "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/IPC/PipeServer.cs"
click node_settings "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Models/AppSettings.cs"
click node_discovery "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/PeerDiscovery.cs"
click node_tcpserver "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/MessengerServer.cs"
click node_tcpclient "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/MessengerClient.cs"
click node_packet "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/PacketHelper.cs"
click node_crypto "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Encryption/CryptoManager.cs"
click node_rsa "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Encryption/RsaCryptoService.cs"
click node_aes "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Encryption/AesCryptoService.cs"
click node_repositories "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Database/ContactRepository.cs"
click node_messages "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Database/MessageRepository.cs"
click node_database "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Database/AppDbContext.cs"
click node_contacts "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Models/Contact.cs"
click node_message "https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Models/Message.cs"

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_wpf,node_views,node_viewmodels,node_pipeclient,node_user toneBlue
class node_worker,node_service,node_pipeserver,node_settings toneAmber
class node_discovery,node_tcpserver,node_tcpclient,node_packet toneMint
class node_crypto,node_rsa,node_aes toneRose
class node_repositories,node_messages,node_database,node_contacts,node_message,node_lanpeers toneIndigo
```

## Components

### Desktop interface

- [WPF app](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.WPF/App.xaml.cs): `EncryptedMessenger.WPF/App.xaml.cs`
- [Chat and settings UI](https://github.com/sashabilenko9-glitch/encryptedmessenger/tree/main/EncryptedMessenger.WPF/Views): `EncryptedMessenger.WPF/Views`
- [UI view models](https://github.com/sashabilenko9-glitch/encryptedmessenger/tree/main/EncryptedMessenger.WPF/ViewModels): `EncryptedMessenger.WPF/ViewModels`
- [Pipe client](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/IPC/PipeClient.cs): `EncryptedMessenger.Core/IPC/PipeClient.cs`

### Service runtime

- [Service worker](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.WindowsService/MessengerWorker.cs): `EncryptedMessenger.WindowsService/MessengerWorker.cs`
- [Messenger orchestrator](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Services/MessengerService.cs): `EncryptedMessenger.Core/Services/MessengerService.cs`
- [Pipe server](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/IPC/PipeServer.cs): `EncryptedMessenger.Core/IPC/PipeServer.cs`
- [App settings](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Models/AppSettings.cs): `EncryptedMessenger.Core/Models/AppSettings.cs`

### Peer communication

- [Peer discovery](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/PeerDiscovery.cs): `EncryptedMessenger.Core/Network/PeerDiscovery.cs`
- [TCP listener](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/MessengerServer.cs): `EncryptedMessenger.Core/Network/MessengerServer.cs`
- [TCP peer client](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/MessengerClient.cs): `EncryptedMessenger.Core/Network/MessengerClient.cs`
- [Packet framing](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Network/PacketHelper.cs): `EncryptedMessenger.Core/Network/PacketHelper.cs`

### Encryption

- [Crypto manager](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Encryption/CryptoManager.cs): `EncryptedMessenger.Core/Encryption/CryptoManager.cs`
- [RSA key exchange](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Encryption/RsaCryptoService.cs): `EncryptedMessenger.Core/Encryption/RsaCryptoService.cs`
- [AES content crypto](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Encryption/AesCryptoService.cs): `EncryptedMessenger.Core/Encryption/AesCryptoService.cs`

### Local persistence

- [Contact and message repositories](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Database/ContactRepository.cs): `EncryptedMessenger.Core/Database/ContactRepository.cs`
- [Message repository](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Database/MessageRepository.cs): `EncryptedMessenger.Core/Database/MessageRepository.cs`
- [SQLite database](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Database/AppDbContext.cs): `EncryptedMessenger.Core/Database/AppDbContext.cs`
- [Contact records](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Models/Contact.cs): `EncryptedMessenger.Core/Models/Contact.cs`
- [Message records](https://github.com/sashabilenko9-glitch/encryptedmessenger/blob/main/EncryptedMessenger.Core/Models/Message.cs): `EncryptedMessenger.Core/Models/Message.cs`

### Other components

- **Messenger user**
- **LAN peers**

## Connections

- Messenger user → Chat and settings UI: uses
- Chat and settings UI → UI view models: invokes
- WPF app → UI view models: creates
- UI view models → Pipe client: sends requests
- Pipe client → Pipe server: exchanges JSON
- WPF app → Messenger orchestrator: starts standalone
- Service worker → Messenger orchestrator: starts
- Messenger orchestrator → App settings: loads
- Messenger orchestrator → Pipe server: starts
- Messenger orchestrator → Peer discovery: starts optionally
- Messenger orchestrator → TCP listener: starts
- Messenger orchestrator → Contact and message repositories: reads and updates contacts
- Messenger orchestrator → Message repository: saves and queries history
- Messenger orchestrator → TCP peer client: connects and sends
- Messenger orchestrator → Pipe server: broadcasts updates
- Peer discovery → LAN peers: UDP broadcast
- LAN peers → Peer discovery: peer announcements
- LAN peers → TCP listener: TCP messages
- TCP peer client → LAN peers: TCP messages
- TCP peer client → Packet framing: frames packets
- TCP listener → Packet framing: frames packets
- TCP peer client → Crypto manager: encrypts and decrypts
- Crypto manager → RSA key exchange: exchanges session keys
- Crypto manager → AES content crypto: encrypts content
- Contact and message repositories → SQLite database: reads and writes
- Message repository → SQLite database: reads and writes
- Contact and message repositories → Contact records: stores
- Message repository → Message records: stores
