Az adatszolgáltatási rendszer kliens felülete Budapest, 1999. május 21. BÉT projekt
AZ ADATSZOLGÁLTATÁSI RENDSZER KLIENS FELÜLETE AZONOSÍTÁSA A adatszolgáltatási rendszer kliens felülete 20 számozott lapot tartalmaz Készítette: 1999. május 20. Kovács Gábor Jóváhagyta: 1999. május 21. Kollár Dóra A példány sorszáma:. és tulajdonosa: MÓDOSÍTÁSOK JEGYZÉKE Sorsz.: Oldal / fejezet: Változtatás jellege: Kelt: Aláírás: 1. 2. 4. fejezet A rekordformátumok módosítása (nem képezi a dokumentum szerves részét) A dokumentum angol nyelven is elkészült 1999. 05. 21. 1999. 05. 21. 1999. május 21. Változatszám 2.1. 2/20
Tartalomjegyzék 1. Bevezetés...4 2. Az adatszolgáltatási rendszer mőködése...4 3. A programozói interfész felépítése...6 3.1 A C++ nyelvő programozói interfész...6 3.1.1 A kommunikációs kapcsolat kezelésének eszközei...6 3.1.2 A kommunikációs kapcsolat eseményeinek callback osztálya...7 3.1.3 Példa a kapcsolat felvételére és a callback mechanizmus használatára...9 3.1.4 A kiszolgáló folyamatok vezérlése...11 3.1.5 Az adatkérések regisztrálása...11 3.1.6 A kiszolgáló folyamatok callback ısosztálya...12 3.1.7 Az adatkérések callback osztálya...13 3.1.8 Az üzenetek fogadására szolgáló folyamat callback osztálya...14 3.2 A C nyelvő programozói interfész...15 3.2.1 A kommunikációs kapcsolat kezelésének eszközei...15 3.2.2 A kommunikációs kapcsolat eseményeinek callback függvényei...16 3.2.3 A kiszolgáló folyamatok vezérlése...16 3.2.4 A kiszolgáló folyamatok vezérlésének callback függvényei...17 3.2.5 Az adatkérések regisztrálása...18 Melléklet: Technikai specifikáció A B C D E F G H 1999. május 21. Változatszám 2.1. 3/20
1. Bevezetés A Budapesti Értéktızsde (BÉT) annak érdekében, hogy a kereskedés eseményeirıl pontosabb és bıvebb információt szolgáltathasson, új adatszolgáltatási rendszert helyez üzembe. Az új adatszolgáltatási rendszer a mőködés struktúrájában, a szolgáltatott adatok tekintetében és a szolgáltatás biztonságát illetıen jelentısen eltér a korábban üzemelı rendszertıl, ezért a következıkben áttekintésre kerülnek a változások a részletes mőszaki specifikációk és adatszerkezetek bemutatásával együtt. Itt szeretnénk megjegyezni, hogy a szolgáltatott adatok szerkezetében változásokra csak a bıvített adattartalom (öt legjobb ajánlat) elhelyezhetıségének mértékéig került sor, a lényegi változás az adatok elérhetıségének módjában van. Az adatszolgáltató rendszer és a kliens oldali alkalmazások illesztésének megkönnyítése érdekében C++ és C nyelvő programozói interfész is kialakításra került. Figyelembe véve, hogy az új rendszer szolgáltatásainak igénybevételéhez a vendoroknak is fel kell készülni, ezért a BÉT 1999. augusztus 31-ig biztosítja a kereskedési adatoknak a korábbi, fájlmegosztáson alapuló elérhetıségét. A fájlmegosztáson alapuló adatszolgáltatás az új rendszerrel párhuzamosan, a megnövelt sebességő TCP/IP hálózaton keresztül érhetı el. A BÉT az átmenet idıszakában a fájlmegosztásos rendszerben is biztosítja a bıvített adattartalmú, azaz a legjobb öt ajánlatot tartalmazó adatszolgáltatást. Jelen dokumentum célja, hogy ismertesse az adatszolgáltató rendszer programozói felületét és segítséget nyújtson a kliens oldali programfejlesztık számára az új rendszerre való áttéréshez és annak használatához. 2. Az adatszolgáltatási rendszer mőködése A rendszer kliens/szerver architektúrával rendelkezik, amely a korábbi adatszolgáltatással lényegében megegyezı adatszerkezettel teszi lehetıvé az adatok elérését a vendorok számára. Az adatszolgáltatási rendszer a szerzıdéseknek megfelelıen két típusú szolgáltatást nyújt, a korábbival megegyezı vagy az öt legjobb ajánlattal kiegészített adattartalommal. A megfelelı adatszerkezetek leírása a techikai specifikáció mellékletében található. Az új adatszolgáltatási rendszer felépítését a következı ábra szemlélteti: 1999. május 21. Változatszám 2.1. 4/20
Real-time szerver LOG szerver Központi Nyilvántartás Kapcsolatfelvételi szerver Kommunikációs felület Felhasználói kliens Kereskedési rendszerek Adatfogadó program vendrt_ééééhhnn.dat vendrto_ééééhhnn.dat Kommunikációs szerver Kommunikációs felület Telefon hálózat Kommunikációs felület Felhasználói felület API vendset_ééééhhnn.dat A kereskedési rendszerekbıl érkezı real-time kereskedési adatokat a szerver egy dátumbélyeggel ellátott vendrt_ééééhhnn.dat (ahol éééé az évet, hh a hónapot, nn a napot jelöli) nevő fájlba helyezi. A napi záró adatokat tartalmazó állomány vendset_ééééhhnn.dat (ahol éééé az évet, hh a hónapot, nn a napot jelöli) néven a kereskedés végén kerül a szerverre. A kereskedési adatokat tartalmazó állományok a BÉT szabályozása szerint meghatározott ideig (jelenleg 1 hétig) érhetık el a szerveren, biztosítva a felhasználók számára az elızı napok adataihoz történı hozzáférést. A rendszerben a sikeres és sikertelen kapcsolódások, valamint az igénybevett szolgáltatások folyamatosan naplózásra kerülnek. Az adatszolgáltatási rendszer használatának megkezdéséhez hálózati kapcsolatot kell kiépíteni a BÉT routerén keresztül az adatszolgáltatási rendszer hálózatával. Ez történhet bérelt vonalon, ISDN telefonvonalon vagy kapcsolt vonalon keresztül. Vonali kapcsolódás esetén a kapcsolat a (00 36 1) 327-82-00 -as telefonszámon kezdeményezhetı. A hálózati kapcsolódáshoz a BÉT által kiadott felhasználói nevet és felhasználói jelszót kell megadni. A kliensek a szerverhez socket-en keresztül, a 192.168.55.1-es IP cím 2400-as IP portján kapcsolódhatnak. Az adatszolgáltatási rendszerhez történı kapcsolódás során a kliensek felhasználói névvel és jelszóval azonosítják magukat. A kapcsolatfelvétel során a szerver ellenırzi a kliens jogosultságait, majd egy dinamikusan kiosztott IP portot (2401-es porttól kezdıdıen) és saját kiszolgáló folyamatot rendel a kapcsolathoz. Sikeres kapcsolatfelvétel után a kliens adatkéréseket intézhet a szerverhez, amelyeket a szerver megfelelı jogosultságok megléte esetén kiszolgál. A szolgáltatások elindítása és leállítása a felhasználó kezdeményezésére történik. A folyamatos információszolgáltatás mellett a felhasználónak lehetısége van a historikus kereskedési adatok idıpont szerinti lekérdezésére is. További szolgáltatásként a BÉT rövid, egysoros üzeneteket küldhet a felhasználók számára a kereskedés közben bekövetkezett eseményekrıl. Az adatszolgáltatói rendszer felhasználói számára egy Windows 95/98/NT operációs rendszerek alatt mőködı kliens oldali adatfogadó alkalmazás került kifejlesztésre, amely az adatok interaktív fogadása, feldolgozása és megjelenítése mellett az adatok 1999. május 21. Változatszám 2.1. 5/20
kliens oldali fájlba történı lementésére is képes. A kliens alkalmazás által elıállított fájl szerkezete teljes mértékben megegyezik a korábbi rendszerben fájlmegosztással elérhetı állománnyal. A kliens oldali alkalmazásfejlesztık számára C++ és C nyelvő programozói interfész készült, amely a socket-en lezajló kommunikációt elfedve, könnyen kezelhetı módon teszi lehetıvé a felhasználói kérések megfogalmazását és a kiszolgáló folyamatok adatainak érkeztetését. A programozói interfész használatának ismertetésére egy bemutató alkalmazás készült, amely a szerverhez történı kapcsolódás után a kereskedési adatokat egy kliens oldali fájlba menti. A program forráskódja szabadon felhasználható, UNIX és Windows 95/98/NT rendszerek alatt egyaránt lefordítható. 3. A programozói interfész felépítése A kliens oldali alkalmazásfejlesztık számára két különbözı (C++ és C nyelvő) programozói API került kifejlesztésre. A C nyelvő API nem más, mint a C++ alapú interfész egyetlen kommunikációs kapcsolatra (egy objektumra) történı leszőkítése. Azon fejlesztık számára, akik C és C++ nyelvő programozásban egyaránt jártasak, a C++ nyelvő API használata javasolt, mert áttekinthetıbb, könnyebben és szélesebb körben alkalmazható a C nyelvő megvalósításnál. A C++ API definíciói a viscppapi.h header fájlban, míg a C API definíciói a viscapi.h header fájlban található. 3.1 A C++ nyelvő programozói interfész A C++ nyelvő API megvalósításban a szerverrel történı kommunikációt a visinterface osztály végzi. A felhasználói programban a szerverrel való kapcsolattartáshoz egy visinterface típusú objektum deklarálására van szükség, majd a megfelelı vezérlı tagfüggvények segítségével küldhetık kérések a szerver felé. A visinterface osztály a mőködése során bekövetkezı eseményekrıl callback osztályokon keresztül, a megfelelı callback osztály adott eseményhez kötött tagfüggvényének meghívásával értesíti a felhasználót. Egy adott esemény bekövetkezésének figyeléséhez létre kell hozni egy callback osztályból származtatott saját osztályt, majd meg kell írni az eseményt kezelı megfelelı virtuális tagfüggvényt. A programban egy visinterface osztály definíciója: visinterface myinterface; 3.1.1 A kommunikációs kapcsolat kezelésének eszközei A szerverhez történı kapcsolódást a Connect tagfüggvény végzi: bool Connect( const char* username, const char* password, 1999. május 21. Változatszám 2.1. 6/20
const char* IPaddress, int IPport Visszatérési értéke sikeres kapcsolatfelvétel esetén true, minden más esetben false. Használata: if( myinterface.connect( vendor1, password, 192.168.55.1, 2400) ) printf( Successfully connected to server \n } else printf( Could not connect to server\n } A kapcsolat bontását a Disconnect tagfüggvény végzi. void Disconnect( Az interész kapcsolódási állapotának lekérdezésére szolgál az isconnected() függvény: bool IsConnected( Visszatérési élı hálózati kapcsolat esetén true, minden más esetben false. Használata: If( myinterface.isconnected() ) printf( Still connected!\n 3.1.2 A kommunikációs kapcsolat eseményeinek callback osztálya A kommunikációs kapcsolat eseményeirıl a visinterfacecallback osztályon keresztül kaphat értesítést a felhasználó. class visinterfacecallback 1999. május 21. Változatszám 2.1. 7/20
}; public: virtual void ConnectionCallBack(bool issuccess virtual void DisconnectCallBack( A visinterfacecallback osztályt a visinterface osztály RegisterInterfaceCallBack tagfüggvényével regisztrálhatjuk az adott visinterface objektum számára. void RegisterInterfaceCallBack( visinterfacecallback* InterfaceCallBackClass A visinterfacecallback osztály ConnectionCallBack tagfüggvénye abban ez esetben hívódik meg, ha a visinterface objektum kapcsolódni próbált a szerverhez. A függvény az issuccess argumentumon keresztül szerez tudomást a kapcsolódás sikerességérıl. Az issucces argumentum értéke sikeres kapcsolódás esetén true, sikertelen kapcsolódás esetén false. A DisconnectCallback tagfüggvény abban az esetben hívódik meg, ha a szerver számítógéppel korábban kiépült kapcsolat megszőnt. Használata: A visszahívási mechanizmus használatához létre kell hozni egy osztályt, amely a visinterfacecallback osztályból származik. Ezen osztály megfelelı eseménykezelı tagfüggvényeinek megírásával kezelhetık le az egyes események. 1999. május 21. Változatszám 2.1. 8/20
3.1.3 Példa a kapcsolat felvételére és a callback mechanizmus használatára class myinterfacecallback : public visinterfacecallback public: virtual void ConnectionCallBack(bool issuccess virtual void DisconnectCallBack( }; void myinterfacecallback::connectioncallback(bool issuccess) if( issuccess ) printf( Successfully connected to server \n else printf( Could not connect to server\n } void myinterfacecallback::disconnectcallback() printf( Disconnected from server. \n } int main() myinterfacecallback ITFCallBack; visinterface myinterface; myinterface.registerinterfacecallback(&itfcallback myinterface.connect( vendor1, password, 192.168.55.1, 2400 while( /*condition*/) 1999. május 21. Változatszám 2.1. 9/20
} /* do something */ } myinterface.disconnect( 1999. május 21. Változatszám 2.1. 10/20
3.1.4 A kiszolgáló folyamatok vezérlése Az alkalmazói program egyes adatkéréseit önálló programszálként futó kiszolgáló folyamatok (service-ek) teljesítik. A kiszolgáló folyamatok a kérés regisztrálását követıen azok megszakításáig egymással párhuzamosan futnak, a szerver számítógéppel való kapcsolattartást automatikusan végzik. A szervertıl kapott adatokat az egyes kiszolgálókhoz tartozó CallBack osztályokon keresztül, visszahívási mechanizmussal adják át. Minden kiszolgáló folyamat regisztrálásakor saját azonosítót kap, amellyel futása szüneteltethetı vagy elindítható, illetve a folyamat véglegesen eltávolítható. Az egyes kiszolgáló folyamatok regisztrációját 2.1.5 fejezet tartalmazza. Egy folyamat futási állapotának lekérdezésére az isservicepaused függvény szolgál. bool isservicepaused( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. Visszatérési értéke true, amennyiben a kiszolgáló folyamat futása szüneteltetett, false amennyiben a kiszolgáló futása folyamatban van. Egy folyamat futási állapotának szüneteltetésére a ServicePauseOn függvény szolgál. void ServicePauseOn( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. Egy felfüggesztett futású folyamat elindítására a ServicePauseOff függvény szolgál. void ServicePauseOff( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. Egy kiszolgáló folyamat végleges eltávolítására a ServiceShutdown függvény szolgál. void ServiceShutdown( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. 3.1.5 Az adatkérések regisztrálása Az alkalmazói program egyes adatkéréseihez tartozó kiszolgáló folyamatokat a kapcsolatfelvételt követıen a visinterface objektumban regisztrálni kell. Egy adatfájl lekérdezésére szolgáló folyamat regisztrációját a visinterface osztály RegisterDataService tagfüggvénye végzi. 1999. május 21. Változatszám 2.1. 11/20
int RegisterDataService( int& ServiceIdentifier_out, char* Filename, int StartRecord, visdatacallback* DataCallBackClass A függvény argumentumai: ServiceIdentifier_out Filename StartRecord DataCallBackClass referenciaváltozó, melyen keresztül a felhasználói program visszakapja a regisztrált kiszolgáló folyamat azonosítóját a lekérdezni kívánt adatfájl neve az adatfájl lekérdezésének kezdı rekordja a DataCallBack osztály, amely az adatokat fogadja A szerver által küldött üzenetek fogadására szolgáló folyamat regisztrációját a visinterface osztály RegisterMessageService tagfüggvénye végzi. int RegisterMessageService( int& ServiceIdentifier_out, vismessagecallback* MessageCallBackClass A függvény argumentumai: ServiceIdentifier_out referenciaváltozó, melyen keresztül a felhasználói program visszakapja a regisztrált kiszolgáló folyamat azonosítóját MessageCallBackClass a MessageCallBackClass osztály, amely az üzeneteket fogadja 3.1.6 A kiszolgáló folyamatok callback ısosztálya Az egyes kérések kiszolgáló folyamatai callback osztályokon keresztül értesítik a felhasználót. A kiszolgáló folyamatok vezérlı eseményeinek callback függvényeit a visservicecallback osztály tartalmazza. Mivel a kiszolgáló folyamatok callback osztályai a visservicecallback osztályból publikus módon származnak, a vezérlés által keltett eseményeket kezelı függvények bármely folyamat callback osztályában 1999. május 21. Változatszám 2.1. 12/20
megadhatók. A tagfüggvények az egyes vezérlı függvényeknek felelnek meg. Minden eseménykezelı függvény megkapja az eseményt kiváltó folyamat azonosítóját, így lehetıség van egy callback osztályban több folyamat eseményeinek kezelésére. class visservicecallback public: virtual void ServicePauseOn(int ServiceIdentifier_in virtual void ServicePauseOff(int ServiceIdentifier_in virtual void ServiceShutdown(int ServiceIdentifier_in }; 3.1.7 Az adatkérések callback osztálya Az adatfájlok lekérdezésének kapcsolat eseményeirıl a visdatacallback osztályon keresztül kaphat értesítést a felhasználó. class visdatacallback : public visservicecallback public: virtual void DataReceiver( int ServiceIdentifier_in, const char* DataRecord }; virtual void DataServiceCallBack( int ServiceIdentifier_in, int event_code A beérkezett adatokat a DataReceiver függvény kapja meg. A függvény argumentumai: ServiceIdentifier_in Az kiszolgáló folyamat azonosítója. DataRecord Az adatfájl sorrendben következı adatrekordja. 1999. május 21. Változatszám 2.1. 13/20
Az adatrekordok szerkezetének leírása jelen dokumentum mellékleteként megtalálható. Az adatlekérdezés egyéb eseményeirıl a DataServiceCallBack függvény kap értesítést. A függvény argumentumai: ServiceIdentifier_in event_code Az kiszolgáló folyamat azonosítója. A bekövetkezett esemény kódja. A jelenleg használt eseménykódok: FileNotFound FileOpened Amennyiben a lekérdezésben megadott adatfájl nem található a szerveren. Amennyiben a lekérdezésben megadott adatfájl sikeresen megnyitásra került. 3.1.8 Az üzenetek fogadására szolgáló folyamat callback osztálya Üzenetek érkezésérıl a vismessagecallback osztályon keresztül kaphat értesítést a felhasználó. class vismessagecallback : public visservicecallback public: virtual void MessageReceiver( int ServiceIdentifier_in, const MessageStructTP* Message }; A függvény argumentumai: ServiceIdentifier_in Message Az kiszolgáló folyamat azonosítója. A beérkezett üzenet. Az üzenet struktúrája: #define DATETIME_LENGTH 6 #define USERNAME_LENGTH 20 #define MESSAGE_LENGTH 80 1999. május 21. Változatszám 2.1. 14/20
struct MessageStructTP }; char time[datetime_length]; char target[username_length]; char message[message_length]; 3.2 A C nyelvő programozói interfész A C nyelvő programozói interfész a C++ nyelvő interfész egyetlen kommunikációs kapcsolatra (egy objektumra) történı leszőkítése. A függvények elnevezése és használata megegyezik a C++ interfész visinterface osztályának tagfüggvényeivel. Az események kezelése a callback osztályok tagfüggvényeinek megfelelı callback függvények regisztrálásával tehetı meg. 3.2.1 A kommunikációs kapcsolat kezelésének eszközei A szerverhez történı kapcsolódást a Connect függvény végzi: int Connect( const char* username, const char* password, const char* IPaddress, int IPport Visszatérési értéke sikeres kapcsolatfelvétel esetén 1, minden más esetben 0. Használata: if( Connect( vendor1, password, 192.168.55.1, 2400) ) printf( Successfully connected to server \n } else printf( Could not connect to server\n 1999. május 21. Változatszám 2.1. 15/20
} A kapcsolat bontását a Disconnect függvény végzi. void Disconnect( Az interész kapcsolódási állapotának lekérdezésére szolgál az isconnected() függvény: int IsConnected( Visszatérési élı hálózati kapcsolat esetén true, minden más esetben false. Használata: If(IsConnected() ) printf( Still connected!\n 3.2.2 A kommunikációs kapcsolat eseményeinek callback függvényei A kommunikációs kapcsolat eseményeirıl callback függvényeken keresztül kaphat értesítést a felhasználó. Definíciójuk: typedef void ConnectionCallBackFuncTP(int issuccess typedef void DisconnectCallBackFuncTP( A függvények regisztrációjára szolgáló függvények: void RegisterConnectionCallBack( ConnectionCallBackFuncTP* ConnectionCallBackFunction void RegisterDisconnectCallBack( DisconnectCallBackFuncTP* DisconnectCallBackFunction 3.2.3 A kiszolgáló folyamatok vezérlése Az alkalmazói program egyes adatkéréseit önálló programszálként futó kiszolgáló folyamatok (service-ek) teljesítik. A kiszolgáló folyamatok a kérés regisztrálását követıen azok megszakításáig egymással párhuzamosan futnak, a szerver számítógéppel való kapcsolattartást automatikusan végzik. A szervertıl kapott adatokat az egyes kiszolgálókhoz tartozó CallBack osztályokon keresztül, visszahívási 1999. május 21. Változatszám 2.1. 16/20
mechanizmussal adják át. Minden kiszolgáló folyamat regisztrálásakor saját azonosítót kap, amellyel futása szüneteltethetı vagy elindítható, illetve a folyamat véglegesen eltávolítható. Az egyes kiszolgáló folyamatok C nyelvő regisztrációját 2.2.5 fejezet tartalmazza. Egy folyamat futási állapotának lekérdezésére az isservicepaused függvény szolgál. int isservicepaused( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. Visszatérési értéke 1, amennyiben a kiszolgáló folyamat futása szüneteltetett, 0 amennyiben a kiszolgáló futása folyamatban van. Egy folyamat futási állapotának szüneteltetésére a ServicePauseOn függvény szolgál. void ServicePauseOn( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. Egy felfüggesztett futású folyamat elindítására a ServicePauseOff függvény szolgál. void ServicePauseOff( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. Egy kiszolgáló folyamat végleges eltávolítására a ServiceShutdown függvény szolgál. void ServiceShutdown( int ServiceIdentifier_in A függvény argumentumaként a kiszolgáló folyamat azonosítóját kell megadni. 3.2.4 A kiszolgáló folyamatok vezérlésének callback függvényei A kiszolgáló folyamatok vezérlésekor az egyes vezérlı függvényeknek megfelelı callback függvények hívódnak meg. Argumentumuk a kiszolgáló folyamat azonosítója. Definíciójuk: typedef void ServiceShutdownFuncTP(int ServiceIdentifier_in typedef void ServicePauseOnFuncTP(int ServiceIdentifier_in typedef void ServicePauseOffFuncTP(int ServiceIdentifier_in 1999. május 21. Változatszám 2.1. 17/20
3.2.5 Az adatkérések regisztrálása Az alkalmazói program egyes adatkéréseihez tartozó kiszolgáló folyamatokat a kapcsolatfelvételt követıen regisztrálni kell. Egy adatfájl lekérdezésére szolgáló folyamat regisztrációját a RegisterDataService függvény végzi. int RegisterDataService( int* ServiceIdentifier_out, char* Filename, int StartRecord, DataReceiverFuncTP* DataReceiverFunction, DataServiceCallBackFuncTP* DataServiceCallBackFunction, ServiceShutdownFuncTP* ServiceShutdownFunction, ServicePauseOnFuncTP* ServicePauseOnFunction, ServicePauseOffFuncTP* ServicePauseOffFunction A függvény argumentumai: ServiceIdentifier_out Filename StartRecord DataReceiverFunction pointer változó, melyen keresztül a felhasználói program visszakapja a regisztrált kiszolgáló folyamat azonosítóját a lekérdezni kívánt adatfájl neve az adatfájl lekérdezésének kezdı rekordja az adatok fogadását végzı függvény DataServiceCallBackFunction a folyamat egyéb eseményeit kezelı függvény ServiceShutdownFunction a folyamat lezárásakor meghívódó függvény ServicePauseOnFunction a folyamat futásának szüneteltetésekor meghívódó függvény ServicePauseOffFunction a folyamat futásának folytatásakor meghívódó függvény Az adatok fogadását végzı függvény definíciója: typedef void DataReceiverFuncTP( int ServiceIdentifier_in, char* DataRecord 1999. május 21. Változatszám 2.1. 18/20
A függvény argumentumai: ServiceIdentifier_in DataRecord a regisztrált kiszolgáló folyamat azonosítója az adatfájl sorrendben következı adatrekordja Az adatlekérdezés egyéb eseményeirıl a DataServiceCallBack függvény kap értesítést. typedef void DataServiceCallBackFuncTP( A függvény argumentumai: ServiceIdentifier_in event_code int ServiceIdentifier_in, int event_code Az kiszolgáló folyamat azonosítója. A bekövetkezett esemény kódja. A jelenleg használt eseménykódok: FileNotFound FileOpened Amennyiben a lekérdezésben megadott adatfájl nem található a szerveren. Amennyiben a lekérdezésben megadott adatfájl sikeresen megnyitásra került. A szerver által küldött üzenetek fogadására szolgáló folyamat regisztrációját a RegisterMessageService függvény végzi. int RegisterMessageService( int* ServiceIdentifier_out, MessageReceiverFuncTP* MessageReceiverFunction, ServiceShutdownFuncTP* ServiceShutdownFunction, ServicePauseOnFuncTP* ServicePauseOnFunction, ServicePauseOffFuncTP* ServicePauseOffFunction A függvény argumentumai: ServiceIdentifier_out pointer változó, melyen keresztül a felhasználói program visszakapja a regisztrált kiszolgáló folyamat azonosítóját 1999. május 21. Változatszám 2.1. 19/20
MessageReceiverFunction ServiceShutdownFunction az adatok fogadását végzı függvény a folyamat lezárásakor meghívódó függvény ServicePauseOnFunction a folyamat futásának szüneteltetésekor meghívódó függvény ServicePauseOffFunction a folyamat futásának folytatásakor meghívódó függvény Üzenetek érkezésérıl a MessageReceiverFuncTP függvényen keresztül kaphat értesítést a felhasználó. Az üzenetek fogadását végzı függvény definíciója: typedef void MessageReceiverFuncTP( int ServiceIdentifier_in, MessageStructTP* Message A függvény argumentumai: ServiceIdentifier_in Message Az kiszolgáló folyamat azonosítója. A beérkezett üzenet. Az üzenet struktúrája: #define DATETIME_LENGTH 6 #define USERNAME_LENGTH 20 #define MESSAGE_LENGTH 80 struct MessageStructTP char time[datetime_length]; char target[username_length]; char message[message_length]; }; 1999. május 21. Változatszám 2.1. 20/20