Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ CORBA
ΠΡΠ° ΠΏΠ°Π½Π΅Π»Ρ — ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ ΠΆΠ΅ Π²Π½Π΅ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ Π² Π»Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΌΠ΅Π½Π΅Π½ΠΎ. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ WelcomeImpl: Hello (Π² Π»Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ), ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° Π½Π΅Π³ΠΎ ΠΈ Π²Π½ΡΡΡΡ ΠΏΠΎΠΊΠ° Π΅ΡΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ (Π² ΠΏΡΠ°Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ) ΠΌΠ΅ΡΠΎΠ΄Π°… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ CORBA (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ°Π±ΠΎΡΠ°ΡΠΎΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ°:
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ CORBA
ΠΡΠΈΠΌΠ΅Ρ 1. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ CORBA-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ/ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΠ‘, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ·:
Β· CORBA-ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΠΊ Π½Π΅ΠΌΡ CORBA-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°;
Β· CORBA-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ CORBA-ΡΠ΅ΡΠ²Π΅ΡΡ.
ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ CORBA-ΡΠ΅ΡΠ²Π΅ΡΠ°
ΠΠ»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ CORBA-ΡΠ΅ΡΠ²Π΅ΡΠ° Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΌΠ°ΡΡΠ΅ΡΠ° CORBA Server ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ File | New | Other | Multitier | CORBA Server (ΡΠΈΡ. 1).
Π ΠΈΡΡΠ½ΠΎΠΊ 1
ΠΠΎΠ³Π΄Π° ΠΌΠ°ΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°ΠΏΡΡΠ΅Π½, ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (ΡΠΈΡ. 2):
1. ΠΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° CORBA-ΡΠ΅ΡΠ²Π΅Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ: ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΎΠΏΡΠΈΡ Console Application) ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ (Window Application)? ΠΠ΅ Π»ΠΈΡΠ½Π΅ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ CORBA — ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ°Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡΠ°Ρ ΠΎΠ± ΡΡΠΎΠΌ Π²ΡΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΡ.
Π ΠΈΡΡΠ½ΠΎΠΊ 2
2. ΠΠΌΠ΅Π½Π° IDL-ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΊΠ½ΠΎΠΏΠΊΠ° Add) Π»ΠΈΠ±ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Add New IDL File, ΠΌΠ°ΡΡΠ΅Ρ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΡΡΠΎΠΉ IDL-ΡΠ°ΠΉΠ» ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ Π΅Π³ΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ OK Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈ Π² ΠΎΠΊΠ½Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ IDL-ΡΠ°ΠΉΠ».
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ IDL (ΡΠΈΡ. 5.3).
Π ΠΈΡΡΠ½ΠΎΠΊ 3
Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ User.idl.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 4.
Π ΠΈΡΡΠ½ΠΎΠΊ 4
Π ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Memo1 Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΎΡΠΈΡΡΡΡ ΡΡΡΠΎΠΊΠ° ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΠΊ CORBA-ΡΠ΅ΡΠ²Π΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ CORBAServerProject.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ File | New | Other | Multitier | CORBA Object Implementation Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° (ΡΠΈΡ. 5).
Π ΠΈΡΡΠ½ΠΎΠΊ 5
ΠΠ°ΠΏΡΡΠ΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠ΅Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° IDL ΠΈ ΠΈΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°) ΠΈ ΠΎΡΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ (ΡΠΈΡ. 5.6).
.
Π ΠΈΡΡΠ½ΠΎΠΊ 6
Π ΠΏΠΎΠ»Π΅ Interface Name ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ· Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΈΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° User:Welcome; ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ CORBA Object Implementation. ΠΠΌΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° WelcomeObject ΠΏΡΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ»Π΅ Object Names. Π ΡΠ°ΠΌΠΎΠΌ Π½ΠΈΠ·Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π² Π»Π΅Π²ΠΎΠΉ Π΅Π΅ ΡΡΠΎΡΠΎΠ½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° Show Updates. Π‘ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Show Updates ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π½ΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ². ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Ok ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΊΠ½ΠΎ (ΡΠΈΡ. 7), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π΅Π²Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΌΠ°ΡΡΠ΅ΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² ΠΏΡΠ°Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
Π ΠΈΡΡΠ½ΠΎΠΊ 7
ΠΡΠ° ΠΏΠ°Π½Π΅Π»Ρ — ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ ΠΆΠ΅ Π²Π½Π΅ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ Π² Π»Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΌΠ΅Π½Π΅Π½ΠΎ. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ WelcomeImpl:Hello (Π² Π»Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ), ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° Π½Π΅Π³ΠΎ ΠΈ Π²Π½ΡΡΡΡ ΠΏΠΎΠΊΠ° Π΅ΡΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ (Π² ΠΏΡΠ°Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ) ΠΌΠ΅ΡΠΎΠ΄Π° Hello Π²Π½Π΅ΡΡΠΈ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΡ. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΌΠΎΠ΄ΡΠ»Ρ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΡΠΎΡΠΌΡ #include " CORBAServerUnit.h" , Π° ΡΡΡΠ»ΠΊΡ extern TForm1 *Form1;.
ΠΡΡΠ°Π»ΠΎΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ (ΡΠΈΡ. 8).
Π ΠΈΡΡΠ½ΠΎΠΊ 8
CORBAServerProject.cpp
#include
#pragma hdrstop
//—————————————————————————————————————-
#include «WelcomeServer.h»
#include
USEFORM («CORBAServerUnit.cpp», Form1);
//—————————————————————————————————————-
WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize ();
// Initialize the ORB and BOA
CORBA:ORB_var orb = CORBA: ORB_init (__argc, __argv);
CORBA:BOA_var boa = orb->BOA_init (__argc, __argv);
WelcomeImpl welcome_WelcomeObject («WelcomeObject»);
boa->obj_is_ready (&welcome_WelcomeObject);
Application->CreateForm (__classid (TForm1), &Form1);
Application->Run ();
}
catch (Exception &exception)
{
Application->ShowException (&exception);
}
catch (…)
{
try
{
throw Exception (««);
}
catch (Exception &exception)
{
Application->ShowException (&exception);
}
}
return 0;
}
WelcomeServer.cpp
#pragma hdrstop
#include
#include «WelcomeServer.h»
#include «CORBAServerUnit.h»
//—————————————————————————————————————-
#pragma package (smart_init)
extern TForm1 *Form1;
WelcomeImpl:WelcomeImpl (const char *object_name):
_sk_User:_sk_Welcome (object_name)
{
}
void WelcomeImpl: Hello ()
{
Form1->Memo1->Lines->Add («Hello, client!»);
}
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ CORBA-ΠΌΠ°ΡΡΠ΅ΡΠΎΠ² C++ Builder ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡ ΡΠΌΠ΅Π½ΠΈΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠΌΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ ΡΠ΅ΠΊΡΡΠ°ΠΌΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ IDL-ΡΠ°ΠΉΠ», ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°Π³Π»ΡΡΠΊΠΈ (stubs) ΠΈ ΡΠΊΠ΅Π»Π΅ΡΡ (skeletons) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ CORBA-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠ΅Π³ΠΎΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ, ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΡΠ»ΠΎΠΆΠ½Ρ.
ΠΠ»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ CORBA-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΌΠ°ΡΡΠ΅ΡΠ° CORBA Client ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ File | New | Other | Multitier | CORBA Server (ΡΠΈΡ. 5.9).
Π ΠΈΡΡΠ½ΠΎΠΊ 9
Π ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ (ΡΠΈΡ. 5.10) Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΈΠΏ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²Π²Π΅ΡΡΠΈ ΠΈΠΌΡ IDL-ΡΠ°ΠΉΠ»Π° user.idl, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ CORBA-ΠΊΠ»ΠΈΠ΅Π½Ρ (ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ IDL-ΡΠ°ΠΉΠ» Π² ΠΏΡΠΎΠ΅ΠΊΡ).
Π ΠΈΡΡΠ½ΠΎΠΊ 10
ΠΠ°Π»Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Ρ CORBA-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ (ΡΠΈΡ. 11).
Π ΠΈΡΡΠ½ΠΎΠΊ 11
#include
#pragma hdrstop
#include «CORBAClientUnit.h»
#include «user_c.hh» // !!!
//—————————————————————————————————————-
#pragma package (smart_init)
#pragma resource «*.dfm»
TForm2 *Form2;
//—————————————————————————————————————-
__fastcall TForm2: TForm2(TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————-
void __fastcall TForm2: Button1Click (TObject *Sender)
{
User:Welcome_var H = User: Welcome:_bind («WelcomeObject»);
H->Hello ();
}
Π ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ CORBA-ΡΠ΅ΡΠ²Π΅ΡΡ» ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Hello() ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° WelcomeObject ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Welcome ΠΌΠΎΠ΄ΡΠ»Ρ User.
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΠ‘
ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠ‘ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈΠ»ΠΈΡΡ Smart Agent ΠΈΠ· ΠΌΠ΅Π½Ρ Tools (ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° c:Inprisevbrokerbinosagent.exe) (ΡΠΈΡ. 12).
Π ΠΈΡΡΠ½ΠΎΠΊ 12
ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ (Π²Π½Π΅ ΡΡΠ΅Π΄Ρ C++ Builder) Π·Π°ΠΏΡΡΡΠΈΡΡ CORBA-ΡΠ΅ΡΠ²Π΅Ρ ΠΈ CORBA-ΠΊΠ»ΠΈΠ΅Π½Ρ
ΠΡΠΈΠΌΠ΅Ρ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΠ‘
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΠ‘, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ· Π±Π°Π½ΠΊΠΎΠΌΠ°ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π±Π°Π½ΠΊΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π΅ΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΡΠΈΡ. 15).
Π ΠΈΡΡΠ½ΠΎΠΊ 15
ΠΠ»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π±Π°Π½ΠΊΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΠ°Π·Π½ΡΡ ΠΊΠ°Π½Π°Π»Π°Ρ .
ΠΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΡΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ ΠΊ Π½ΠΈΠΆΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Xaction.idl
enum EnumAction {
balance,
withdraw,
deposit
};
enum EnumStatus {
OK,
invalid,
complete,
incomplete
};
struct xaction {
long UserID;
long PIN;
long account;
double amount;
:EnumAction action;
double balance;
:EnumStatus status;
};
interface Server {
exception NoServer {
string message;
};
:xaction HandleTransaction (
inout :xaction Transaction
);
/* raises (
:Server:NoServer
);
*/
long Balance ();
};
banking.idl
#include «xaction.idl»
interface BankServer {
:xaction HandleTransaction (
inout :xaction Transaction
);
long BankID ();
};
module Bank {
interface Account {
float balance ();
};
interface AccountManager {
:Bank:Account open (
in string name
);
};
};
Π ΠΈΡΡΠ½ΠΎΠΊ 16. ΠΡΠΎΠ΅ΠΊΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±Π°Π½ΠΊΠΎΠΌΠ°ΡΠ°
Π ΠΈΡΡΠ½ΠΎΠΊ 17. Π Π΅ΠΆΠΈΠΌ «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅»
ATMUnit/h
//—————————————————————————————————————-
#ifndef atmunitH
#define atmunitH
//—————————————————————————————————————-
#include
#include
#include
#include
#include
#include
#include
//—————————————————————————————————————-
class ATMObject
{
private:
long _ID;
String _serverName;
public:
ATMObject (){_serverName = «Wells Fargo»; _ID = 100;};
ATMObject (String name){_serverName = name; _ID = 100;};
String serverName (){return _serverName;}
void serverName (String name){_serverName = name;}
long ID (){return _ID;}
void ID (long id){_ID = id;}
};
class TFormATM: public TForm
{
__published: // IDE-managed Components
TEdit *NameBox;
TEdit *PINBox;
TEdit *AmountBox;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TRadioGroup *Action;
TMemo *Memo1;
TRadioGroup *AccountType;
TStatusBar *StatusBar1;
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TGroupBox *GroupBox1;
TGroupBox *GroupBox2;
TBitBtn *BitBtn3;
TLabel *Label4;
TLabel *Label5;
TBevel *Bevel1;
void __fastcall FormCreate (TObject/* */ *Sender);
void __fastcall BitBtn1Click (TObject *Sender);
void __fastcall BitBtn2Click (TObject *Sender);
void __fastcall BitBtn3Click (TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TFormATM (TComponent* Owner);
ATMObject * ATM;
long __fastcall TestConnection ();
};
//—————————————————————————————————————-
extern PACKAGE TFormATM *FormATM;
//—————————————————————————————————————-
#endif
ATMUnit.cpp
#include
#pragma hdrstop
#include «atmunit.h»
#include «servname.h»
#include «xaction_c.hh»
//—————————————————————————————————————-
#pragma package (smart_init)
#pragma resource «*.dfm»
USE_STD_NS
TFormATM *FormATM;
//—————————————————————————————————————-
__fastcall TFormATM: TFormATM (TComponent* Owner)
: TForm (Owner)
{
}
char * const * argV;
int argC;
//—————————————————————————————————————-
// /////////////////////////////////////
// Mimic streaming to VCL Memo Window
// /////////////////////////////////////
class catchit: public streambuf
{
TMemo * M;
int ct;
String S;
char * cbuff;
public:
catchit (TMemo *Memo){M = Memo; ct = 1;};
int sync ();
int overflow (int ch);
};
int catchit: overflow (int ch)
{
S += (char)ch;
return 0;
}
int catchit: sync ()
{
// M->Lines->Strings[ct++] = S;
M->Lines->Add (S);
S = «» ;
return ct;
}
// ////////////////////////////////////////////
// class _update
// Instantiate this object to interface with the view
// Usage: new _update (FormATM);
// ////////////////////////////////////////////
class _update
{
private:
TFormATM * theForm;
public:
__fastcall _update (TFormATM* ATMForm)
{
theForm = ATMForm;
}
long AccountType ()
{
return (long)theForm->AccountType->ItemIndex + 1;
}
EnumAction ActionType ()
{
return (EnumAction)theForm->Action->ItemIndex;
}
long UserID ()
{
if (theForm->NameBox->Text == «John») return 0;
if (theForm->NameBox->Text == «Bill») return 1;
if (theForm->NameBox->Text == «Jim») return 2;
if (theForm->NameBox->Text == «Gene») return 3;
if (theForm->NameBox->Text == «Wally») return 4;
if (theForm->NameBox->Text == «Frank») return 5;
return -1; // Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
}
long PIN()
{ try {
return (long)theForm->PINBox->Text.ToInt ();
} catch (Exception &e) {
return (long)0;
}
}
double Amount ()
{
return theForm->AmountBox->Text.ToDouble ();
}
void UpdateList ()
{ theForm->Memo1->Lines->Clear ();
theForm->Memo1->Lines->Add («John, PIN:123, Bank 1»);
theForm->Memo1->Lines->Add («Bill, PIN:456, Bank 1»);
theForm->Memo1->Lines->Add («Jim, PIN:789, Bank 1»);
theForm->Memo1->Lines->Add («Gene, PIN:123, Bank 2»);
theForm->Memo1->Lines->Add («Wally, PIN:456, Bank 2»);
theForm->Memo1->Lines->Add («Frank, PIN:789, Bank 2»);
}
void UpdateMemo (String str)
{
theForm->Memo1->Lines->Add (str);
}
void UpdateStatus (String str)
{
theForm->StatusBar1->SimpleText = str;
}
void Clear ()
{
theForm->Memo1->Clear ();
}
};
#define mrOK 1
long __fastcall TFormATM: TestConnection ()
{ // ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
try {
CORBA:ORB_ptr orb = CORBA: ORB_init ();
Server_ptr S = Server:_bind (ServerNameDlg->ServerNameEdit->Text.c_str ());
return S->Balance ();
} catch (CORBA:Exception &e) {
return 0;
}
}
//—————————————————————————————————————-
void __fastcall TFormATM: FormCreate (TObject *Sender)
{
ATM = new ATMObject ();
}
//—————————————————————————————————————-
void __fastcall TFormATM: BitBtn1Click (TObject *Sender)
{ // ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
if (ServerNameDlg->ShowModal () == mrOK) {
ATM->serverName (ServerNameDlg->ServerNameEdit->Text);
}
}
//—————————————————————————————————————-
void __fastcall TFormATM: BitBtn2Click (TObject *Sender)
{ // Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
_update * U = new _update (FormATM);
U->UpdateList ();
delete U;
}
//—————————————————————————————————————-
void __fastcall TFormATM: BitBtn3Click (TObject *Sender)
{ // ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
catchit cbuf(Memo1);
ostream CCout(&cbuf); // Visibroker ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Cout
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ATM-ΠΎΠ±ΡΠ΅ΠΊΡΠ°
_update* Input = new _update(FormATM);
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
xaction_var X = new xaction;
// «ΠΠ°ΡΠ΅Π»Π΅Π½ΠΈΠ΅» ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
X->UserID = Input->UserID();
try {
X->PIN = Input->PIN ();
} catch (Exception &e) {
X->PIN = 0;
}
X->amount = Input->Amount ();
X->action = Input->ActionType ();
X->account = Input->AccountType ();
X->balance = 0.00;
X->status = incomplete;
try {
// Π‘ΡΠ°ΡΡ ORB
CORBA:ORB_ptr orb = CORBA: ORB_init ();
Input->UpdateStatus(«* ORB ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½.»);
// ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊ ATM-ΡΠ΅ΡΠ²Π΅ΡΡ
Server_ptr ATMServer = Server:_bind (ATM->serverName ().c_str ());
Input->UpdateStatus(«ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊ ATM-ΡΠ΅ΡΠ²Π΅ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ.»);
Input->UpdateStatus («ATM-ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΊΡΡΡ.»);
// ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ATM-ΡΠ΅ΡΠ²Π΅ΡΡ
ATMServer->HandleTransaction (X);
if (X->status == complete) {
Input->UpdateMemo («ΠΠ°Π»Π°Π½Ρ ΡΡΡΡΠ°: $» + CurrToStr (X->balance));
Input->UpdateMemo («Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°.»);
} else if (X->status == incomplete) {
Input->UpdateMemo(«Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π½Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π°.»);
Input->UpdateMemo («ΠΠ°Π»Π°Π½Ρ ΡΡΡΡΠ°: $» + CurrToStr (X->balance));
} else if (X->status == invalid) {
Input->Clear ();
Input->UpdateMemo («* ID ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ PIN Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ!»);
}
}
catch (const CORBA: Exception& e) {
CCout << e._name () << endl;
Input->UpdateStatus («* ATM-ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½!»);
}
}
//—————————————————————————————————————-
Servername.h
//——————————————————————————————————————
#ifndef servnameH
#define servnameH
//——————————————————————————————————————
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//——————————————————————————————————————
class TServerNameDlg: public TForm
{
__published:
TButton *OKBtn;
TButton *CancelBtn;
TBevel *Bevel1;
TLabel *Label1;
TLabel *ServerNameLabel;
TEdit *ServerNameEdit;
TLabel *Label2;
TButton *ConnectButton;
TLabel *Label3;
TLabel *CountLabel;
TLabel *ResultLabel;
void __fastcall FormShow (TObject/* */ *Sender);
void __fastcall ConnectButtonClick (TObject/* */ *Sender);
void __fastcall OKBtnClick (TObject/* */ *Sender);
private:
public:
virtual __fastcall TServerNameDlg (TComponent* AOwner);
};
//——————————————————————————————————————
extern PACKAGE TServerNameDlg *ServerNameDlg;
//——————————————————————————————————————
#endif
Servername.cpp
#include
#pragma hdrstop
#include «servname.h»
#include «atmunit.h»
//——————————————————————————————————-
#pragma resource «*.dfm»
TServerNameDlg *ServerNameDlg;
//——————————————————————————————————-
__fastcall TServerNameDlg: TServerNameDlg (TComponent* AOwner)
: TForm (AOwner)
{
}
//——————————————————————————————————-
void __fastcall TServerNameDlg: FormShow (TObject/* */ *Sender)
{
ServerNameLabel->Caption = FormATM->ATM->serverName ();
ServerNameEdit->Text = ServerNameLabel->Caption;
ResultLabel->Caption = «» ;
}
//—————————————————————————————————————-
void __fastcall TServerNameDlg: ConnectButtonClick (TObject/* */ *Sender)
{
CountLabel->Caption = String (FormATM->TestConnection ());
if (CountLabel->Caption == «0»)
ResultLabel->Caption = «* Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅Ρ!» ;
else
ResultLabel->Caption = «Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ.» ;
}
//—————————————————————————————————————-
void __fastcall TServerNameDlg: OKBtnClick (TObject/* */ *Sender)
{
if (CountLabel->Caption ≠ String («0»)) {
FormATM->ATM->serverName (ServerNameEdit->Text);
}
}
//—————————————————————————————————————-
Π ΠΈΡΡΠ½ΠΎΠΊ 5.18. ΠΡΠΎΠ΅ΠΊΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ATM-ΡΠ΅ΡΠ²Π΅ΡΠ°
#ifndef atmserverunitH
#define atmserverunitH
//—————————————————————————————————————-
#include
#include
#include
#include
#include «xaction_s.hh»
#include «banking_s.hh»
#include
//—————————————————————————————————————-
class TForm2: public TForm
{
__published: // IDE-managed Components
TLabel *Transactions;
TEdit *Count;
TEdit *ServerNameEdit;
TLabel *Label1;
TBitBtn *BitBtn1;
TGroupBox *GroupBox2;
TGroupBox *GroupBox1;
TBitBtn *BitBtn2;
TMemo *Memo1;
TComboBox *BankBox;
void __fastcall FormClose (TObject *Sender, TCloseAction &Action);
void __fastcall BitBtn1Click (TObject *Sender);
void __fastcall BitBtn2Click (TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
void StartServer ();
void DownServer ();
CORBA:ORB_var orb;
CORBA:BOA_var boa;
CORBA:Object_ptr obj;
String CurrentServerName;
};
//—————————————————————————————————————-
extern PACKAGE TForm2 *Form2;
//—————————————————————————————————————-
#endif
ATMServerUnit.cpp
#include
#pragma hdrstop
#include «atmserverunit.h»
//—————————————————————————————————————-
#pragma package (smart_init)
#pragma resource «*.dfm»
TForm2 *Form2;
//—————————————————————————————————————-
__fastcall TForm2: TForm2(TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————-
char * const * argV;
int argC;
//—————————————————————————————————————-
// /////////////////////////////////////
// Implement CORBA object from skeleton class
// /////////////////////////////////////
class ATMServerImpl: public _sk_Server
{
public:
ATMServerImpl (const char *object_name);
void UpCount (int i = 0){
if (i == 1) {
Form2->Memo1->Lines->Add («ATM-ΡΠ΅ΡΠ²Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½.»);
return;
}
Form2->Count->Text = String (count++);
}
virtual xaction HandleTransaction (xaction& Transaction)
{
UpCount ();
Form2->Memo1->Lines->Add («ΠΠ°Π½ΠΊ Π½Π°ΠΉΠ΄Π΅Π½.»);
Transaction.status = invalid;
for (int i = 0; i < UserCount; i++) {
if (Transaction.UserID == CardHolders[i]->UserID) {
if (Transaction.PIN == CardHolders[i]->PIN) {
Transaction.status = OK;
try {
BankServer_var BankServer = BankServer:_bind ((*Banks[CardHolders[i]->Bank]).c_str ());
BankServer->HandleTransaction (Transaction);
Form2->Memo1->Lines->Add («Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Ρ «+ *Banks[CardHolders[i]->Bank]);
} catch (CORBA:Exception &e){
Form2->Memo1->Lines->Add («* Π‘Π΅ΡΠ²Π΅Ρ Π±Π°Π½ΠΊΠ° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½!»);
return Transaction;
}
}
}
}
// Transaction. status = complete;
return Transaction;
}
virtual CORBA: Long Balance (){UpCount (); return CORBA: Long (count);}
class NoServer: public CORBA: UserException
{
public:
NoServer (){}
static ATMServerImpl: NoServer* _narrow () throw (CORBA:SystemException);
};
private:
int count;
struct _user{
long UserID;
long Bank;
long PIN;
};
_user * CardHolders[10];
long BankOne;
long BankTwo;
int UserCount;
String * Banks[10];
};
ATMServerImpl:ATMServerImpl (const char *object_name=NULL) :
_sk_Server (object_name)
{
count = 0;
UserCount = 0;
UpCount (1);
Banks[0] = new String («BankOne»);
Banks[1] = new String («BankTwo»);
TStrings *SL = new TStringList ();
SL->Add (*Banks[0]);
SL->Add (*Banks[1]);
Form2->BankBox->Items->Assign (SL);
Form2->BankBox->ItemIndex = 0;
BankOne = 0;
BankTwo = 1;
CardHolders[0] = new _user;
CardHolders[1] = new _user;
CardHolders[2] = new _user;
CardHolders[3] = new _user;
CardHolders[4] = new _user;
CardHolders[5] = new _user;
// user 1
CardHolders[0]->UserID = 0; // «John» ;
CardHolders[0]->PIN = 123;
CardHolders[0]->Bank = BankOne;
UserCount++;
CardHolders[1]->UserID = 1; // «Bill» ;
CardHolders[1]->PIN = 456;
CardHolders[1]->Bank = BankOne;
UserCount++;
CardHolders[2]->UserID = 2; // «Jim» ;
CardHolders[2]->PIN = 789;
CardHolders[2]->Bank = BankOne;
UserCount++;
CardHolders[3]->UserID = 3; // «John» ;
CardHolders[3]->PIN = 123;
CardHolders[3]->Bank = BankTwo;
UserCount++;
CardHolders[4]->UserID = 4; // «Bill» ;
CardHolders[4]->PIN = 456;
CardHolders[4]->Bank = BankTwo;
UserCount++;
CardHolders[5]->UserID = 5; // «Jim» ;
CardHolders[5]->PIN = 789;
CardHolders[5]->Bank = BankTwo;
UserCount++;
}
ATMServerImpl* ATMServer;
void TForm2: StartServer ()
{
try {
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ORB ΠΈ BOA
orb = CORBA: ORB_init (argC, argV);
boa = orb->BOA_init (argC, argV);
if (obj) {
Form2->Memo1->Lines->Add («* ATM-ΡΠ΅ΡΠ²Π΅Ρ ΡΠΆΠ΅ Π°ΠΊΡΠΈΠ²Π΅Π½!»);
ServerNameEdit->Text = CurrentServerName;
} else {
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
obj = new ATMServerImpl (ServerNameEdit->Text.c_str ()); //" Wells Fargo");
CurrentServerName = ServerNameEdit->Text;
// ΠΠΊΡΠΏΠΎΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
boa->obj_is_ready (obj);
// ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
// boa->impl_is_ready();
}
} catch (const CORBA: Exception& e) {
ShowMessage («* ΠΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ CORBA-ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅!»);
}
}
void TForm2: DownServer ()
{
try {
if (obj) {
boa->deactivate_obj (obj);
obj->_release ();
obj = obj->_nil ();
}
Form2->Memo1->Lines->Add («* ATM-ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½!»);
} catch (CORBA:Exception &e){
ShowMessage («* ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ATM-ΡΠ΅ΡΠ²Π΅ΡΠ°!»);
}
}
//—————————————————————————————————————-
class ServerThread: public TThread
{
public:
__fastcall ServerThread (bool CS):TThread (CS){};
void __fastcall Execute ()
{
try {
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π²ΡΠΈΡ ORB ΠΈ BOA
CORBA:ORB_var orb = CORBA: ORB_init (argC, argV);
CORBA:BOA_var boa = orb->BOA_init (argC, argV);
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ATMServerImpl ATMServer(«Wells Fargo»);
// ΠΠΊΡΠΏΠΎΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
boa->obj_is_ready(&ATMServer);
// ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
boa->impl_is_ready();
} catch (const CORBA: Exception& e) {
ShowMessage («* ΠΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ CORBA-ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅!»);
}
}
};
ServerThread * ST;
//—————————————————————————————————————-
void __fastcall TForm2: FormClose (TObject *Sender, TCloseAction &Action)
{ // ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°
BitBtn1->Caption = «ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ AYM-ΡΠ΅ΡΠ²Π΅ΡΠ°» ;
DownServer ();
}
//—————————————————————————————————————-
void __fastcall TForm2: BitBtn1Click (TObject *Sender)
{ // Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅/ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ATM-ΡΠ΅ΡΠ²Π΅ΡΠ°
static bool ServerStarted = false;
if (!ServerStarted) { // Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°
Form2->Height = 237;
BitBtn1->Caption = «ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ATM-ΡΠ΅ΡΠ²Π΅ΡΠ°» ;
// ST = new ServerThread (false);
StartServer ();
} else { // ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°
Form2->Height = 108;
BitBtn1->Caption = «ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ATM-ΡΠ΅ΡΠ²Π΅ΡΠ°» ;
DownServer ();
}
ServerStarted = !ServerStarted;
}
//—————————————————————————————————————-
void __fastcall TForm2: BitBtn2Click (TObject *Sender)
{ // ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΏΠΈΡΠΊΠ΅ Π±Π°Π½ΠΊΠ°
try { // ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΏΠΈΡΠΊΠ΅ Π±Π°Π½ΠΊΠ°
BankServer_ptr BankServer =
BankServer:_bind (Form2->BankBox->Items->Strings[BankBox->ItemIndex]. c_str ());
// Π·Π°Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ID Π±Π°Π½ΠΊΠ° Π² Memo
long ID = BankServer->BankID ();
Form2->Memo1->Lines->Add (
AnsiString («ΠΠ°Π½ΠΊ «) +
(ID == 800? AnsiString («BankTwo»): AnsiString («BankOne»)) +
AnsiString («ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½.»));
} catch (CORBA:Exception &e){
ShowMessage (e._name ());
}
}
Π ΠΈΡΡΠ½ΠΎΠΊ 5.19. ΠΡΠΎΠ΅ΠΊΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ BankServerOne
#ifndef BankUnitOneH
#define BankUnitOneH
//—————————————————————————————————————-
#include
#include
#include
#include
#include
#include
//—————————————————————————————————————-
class TBankOneForm: public TForm
{
__published: // IDE-managed Components
TEdit *CountBox;
TLabel *Label1;
TMemo *Memo1;
TBitBtn *BitBtn1;
TStatusBar *StatusBar1;
void __fastcall BitBtn1Click (TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TBankOneForm (TComponent* Owner);
};
//—————————————————————————————————————-
extern PACKAGE TBankOneForm *BankOneForm;
//—————————————————————————————————————-
#endif
BankUnitOne.cpp
//—————————————————————————————————————-
#include
#pragma hdrstop
#include «BankUnitOne.h»
#include «banking_s.hh»
//—————————————————————————————————————-
#pragma package (smart_init)
#pragma resource «*.dfm»
AnsiString Accounts [] = {" ΠΡΠΎΠ²Π΅ΡΠΊΠ°", «ΠΡΠ΅Π΄ΠΈΡ» };
AnsiString Operations [] = {" ΠΠ°Π»Π°Π½Ρ", «Π‘Π½ΡΡΡ», «ΠΠ½Π΅ΡΡΠΈ» };
TBankOneForm *BankOneForm;
//—————————————————————————————————————-
__fastcall TBankOneForm: TBankOneForm (TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————-
char * const * argV;
int argC;
//—————————————————————————————————————-
// ///////////////////////////////////////////
// Implement CORBA object from skeleton class
// ///////////////////////////////////////////
class BankServerImpl: public _sk_BankServer
{
public:
BankServerImpl (const char *object_name);
void UpCount (int i = 0) {
if (i == 1) {
BankOneForm->StatusBar1->SimpleText = «Π‘Π΅ΡΠ²Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½» ;
return;
}
BankOneForm->CountBox->Text = String (++count);
}
virtual long BankID ()
{
return BankNumber;
}
virtual xaction HandleTransaction (xaction& Transaction)
{
bool PostChange = false;
double workingBalance = 0;
UpCount ();
Transaction.status = incomplete;
BankOneForm->Memo1->Lines->Add («ID ΠΊΠ»ΠΈΠ΅Π½ΡΠ°: «+ String (Transaction.UserID));
BankOneForm->Memo1->Lines->Add («Π‘ΡΠ΅Ρ: « + Accounts[Transaction.account]);
BankOneForm->Memo1->Lines->Add («ΠΠΏΠ΅ΡΠ°ΡΠΈΡ: « + Operations[Transaction.action]);
for (int i = 0; i < UserCount; i++) {
if (Transaction.UserID == Customers[i]->UserID) {
if (Transaction.account == 1)
workingBalance = Customers[i]->AccountChecking;
else
workingBalance = Customers[i]->AccountSavings;
switch (Transaction.action) {
case balance:
Transaction.balance = workingBalance;
Transaction.status = complete;
break;
case withdraw:
Transaction.balance = workingBalance;
workingBalance -= Transaction. amount;
if (workingBalance < 0) {
Transaction.status = incomplete;
} else {
Transaction.balance = workingBalance;
Transaction.status = complete;
PostChange = true;
}
break;
case deposit:
workingBalance += Transaction. amount;
Transaction.balance = workingBalance;
Transaction.status = complete;
PostChange = true;
break;
}
if (PostChange) {
if (Transaction.account == 1)
Customers[i]->AccountChecking = workingBalance;
else
Customers[i]->AccountSavings = workingBalance;
}
}
}
return Transaction;
}
private:
long BankNumber;
int count;
int UserCount;
struct _user{
long UserID;
double AccountChecking;
double AccountSavings;
};
_user * Customers[10];
};
BankServerImpl:BankServerImpl (const char *object_name = NULL):
_sk_BankServer (object_name)
{
BankNumber = 900;
count = 0;
UserCount = 0;
Customers[0] = new _user;
Customers[1] = new _user;
Customers[2] = new _user;
Customers[0]->UserID = 0; // «John»
Customers[0]->AccountChecking = 2000.00;
Customers[0]->AccountSavings = 90.00;
UserCount++;
Customers[1]->UserID = 1; // Bill;
Customers[1]->AccountChecking = 100.00;
Customers[1]->AccountSavings = 500.00;
UserCount++;
Customers[2]->UserID = 2; // Jim;
Customers[2]->AccountChecking = 1000.00;
Customers[2]->AccountSavings = 5000.00;
UserCount++;
}
//—————————————————————————————————————-
class ServerThread: public TThread
{
public:
__fastcall ServerThread (bool CS):TThread (CS){};
void __fastcall Execute ()
{
try {
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠRB ΠΈ BOA
CORBA:ORB_var orb = CORBA: ORB_init (argC, argV);
CORBA:BOA_var boa = orb->BOA_init (argC, argV);
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
BankServerImpl BankServer(«BankOne»);
// ΠΠΊΡΠΏΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
boa->obj_is_ready(&BankServer);
BankOneForm->StatusBar1->SimpleText = «Π‘Π΅ΡΠ²Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½» ;
// ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
boa->impl_is_ready();
} catch (const CORBA: Exception& e) {
ShowMessage («* ΠΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ CORBA-ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅!»);
}
}
};
ServerThread * ST;
//—————————————————————————————————————-
void __fastcall TBankOneForm: BitBtn1Click (TObject *Sender)
{ static bool Switch = false;
Switch = !Switch;
BitBtn1->Caption = «ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π±Π°Π½ΠΊΠ°» ;
if (Switch) ST = new ServerThread (false);
else Close();
}