SIGSrv¶
Sprache: C++/MFC (Visual Studio 6, 1998–1999)
Typ: Windows-Dienst + GUI-Anwendung
Autor: Stefan Zeiger
Architektur¶
CSIGSrvApp (CWinApp)
|
|── CXRequestCom (Thread, TCP Port 800)
| |── ON_THREAD_MESSAGE → OnXRequestFromClient()
|
|── CSIGSrvWork
|── OpenSigDatabase() → CDaoDatabase (MDB → MSSQL)
|── OnXRequestFromClient()
|── CSUser::CheckRequest() (Autorisierung)
|── switch(pXRequest->Request())
| |── Login → CSProcessLogin
| |── StockData → CSProcessStockData ← .dta
| |── SplitTitle → CSProcessSplitTitle ← .dta
| |── Branches → CSProcessBranches
| |── NumberService → CSProcessNumberService
| |── default → CSProcessDBGeneric ← DB
|── pSProcessRequest->Process()
|── LogRequest()
Schlüsselklassen¶
CSProcessRequest (Basisklasse)¶
Alle Prozessoren erben von dieser Klasse:
- GetDB() – Datenbankzugriff
- GetRequest() – Zugriff auf den aktuellen Request
- virtual Process() – Muss überschrieben werden
CSProcessStockData¶
Die einzige Klasse mit direktem .dta-Dateizugriff.
void Process() {
// 1. titleNo und dataType aus Request lesen
// 2. GetDataPath() → Dateipfad konstruieren
// 3. CDOldToNewData::LoadOldData() → .dta lesen
// 4. Ergebnis in ListResult() schreiben
}
Dateipfad-Konstruktion:
CSProcessDBGeneric¶
Standard-Prozessor für alle DB-basierten Requests.
Nutzt CSRequestToDB für das Mapping aus der DB:
- Liest Mapping aus TabRequests + TabRequestDescriptor
- Generiert SQL (SELECT/INSERT/UPDATE/DELETE) dynamisch
- Unterstützt JOINs, WHERE-Klauseln, Sprachabhängigkeit
CDOldToNewData¶
Der .dta-Lese/Schreiblayer. Für Option 4 zu ersetzen.
| Methode | Beschreibung |
|---|---|
LoadOldData(path, select, start, stop) |
.dta lesen → CXDataRowList |
StoreOldData(path, dataRowList) |
CXDataRowList → .dta schreiben |
DetachXDataRowList(result) |
Ergebnis übergeben |
Caching: Geladene Daten werden in CDOldToNewDataCache gecacht.
Konfiguration (Registry)¶
Software\CALC\SIG98\SIGSrv\Server\
| Key | Inhalt |
|---|---|
| DatabasePath | Pfad zur MDB-Datei |
| SystemDatabase | Pfad zur .mdw-Datei |
| IPAdapter | IP-Adresse für Listening |
| ListenOnPort80 | 0 oder 1 |