p2ruby 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. data/.gitignore +27 -0
  2. data/HISTORY +7 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +24 -0
  5. data/Rakefile +42 -0
  6. data/VERSION +1 -0
  7. data/bin/olegen.rb +368 -0
  8. data/features/p2ruby.feature +9 -0
  9. data/features/step_definitions/p2ruby_steps.rb +0 -0
  10. data/features/support/env.rb +10 -0
  11. data/features/support/world.rb +12 -0
  12. data/lib/extension.rb +19 -0
  13. data/lib/ole20110223-013209.rb +1677 -0
  14. data/lib/p2ruby/application.rb +111 -0
  15. data/lib/p2ruby/base.rb +59 -0
  16. data/lib/p2ruby/connection.rb +250 -0
  17. data/lib/p2ruby/data_stream.rb +215 -0
  18. data/lib/p2ruby/library.rb +24 -0
  19. data/lib/p2ruby/message.rb +150 -0
  20. data/lib/p2ruby/message_factory.rb +70 -0
  21. data/lib/p2ruby/record.rb +104 -0
  22. data/lib/p2ruby/router.rb +45 -0
  23. data/lib/p2ruby/table_set.rb +166 -0
  24. data/lib/p2ruby.rb +156 -0
  25. data/lib/version.rb +8 -0
  26. data/lib/win32ole-pr.rb +5540 -0
  27. data/spec/encoding_spec.rb +15 -0
  28. data/spec/p2ruby/application_spec.rb +35 -0
  29. data/spec/p2ruby/connection_spec.rb +293 -0
  30. data/spec/p2ruby/data_stream_spec.rb +218 -0
  31. data/spec/p2ruby/library_spec.rb +42 -0
  32. data/spec/p2ruby/message_factory_spec.rb +69 -0
  33. data/spec/p2ruby/message_spec.rb +159 -0
  34. data/spec/p2ruby/record_spec.rb +85 -0
  35. data/spec/p2ruby/router_spec.rb +54 -0
  36. data/spec/p2ruby/table_set_spec.rb +132 -0
  37. data/spec/p2ruby_spec.rb +46 -0
  38. data/spec/spec_helper.rb +78 -0
  39. data/tasks/common.rake +18 -0
  40. data/tasks/doc.rake +14 -0
  41. data/tasks/gem.rake +40 -0
  42. data/tasks/git.rake +34 -0
  43. data/tasks/spec.rake +16 -0
  44. data/tasks/version.rake +71 -0
  45. metadata +149 -0
@@ -0,0 +1,111 @@
1
+ module P2
2
+ # Represents P2 client application
3
+ # �������� ������ ���������� P2ClientGate, ��������������� ��� �� �������������.
4
+ # �� ��������� �������� ��������� �������������, �������� �� ���������� �� ���������
5
+ # (���������������� ini-����), � ����� ������������� ��� �������, ������������� ���
6
+ # ��������-������ ������. ��� ������� � Plaza ��� Plaza-II (��������� ��� ���������
7
+ # �������� ���������� �������� ���� Body).
8
+ # � ���������������� ini-����� ����� ������ ���� � ����� ������� ������ ����������
9
+ # Plaza-II � ����� ����������, � ����� ���� � �trace-����� � ����� � ������� �����������,
10
+ # ����� ��������� ������ � ������ ������, � ����� � ���. ������������� ��������� ��������
11
+ # ����������������� � ������� ����������������� ini-�����, ����������� � ����������� �����.
12
+ # ��� ����, ����� ������ ��������� �������������, �������� �� ���������� �� ���������
13
+ # ������� ���� ������� ������ Application � � ������ ������ StartUp ������� ���
14
+ # ����������������� ini-����� � ���� � ����. ��� ������� �������� ��� �������� �������
15
+ # � ���������� � ������� ����������� ������� get � put.
16
+ # ������ ��� ���������� �� ������ ������ � ������� ��������� ����������.
17
+ #
18
+ class Application < Base
19
+ CLSID = '{08A95064-05C2-4EF4-8B5D-D6211C2C9880}'
20
+ PROGID = 'P2ClientGate.P2Application.1'
21
+
22
+ attr_accessor :ini
23
+
24
+ # Application should not be used directly in client code, Connection.new
25
+ # tries to obtain/create Application instance implicitly.
26
+ #
27
+ def initialize ini
28
+ @ini = Pathname(ini || "./P2ClientGate.ini").expand_path
29
+ error "Wrong ini file #{@ini}" unless @ini.exist?
30
+
31
+ super(:ini => @ini) { StartUp @ini }
32
+ end
33
+
34
+ # Application is a Resettable Singleton:
35
+ # Normally, you use Application.instance to create/obtain its instance;
36
+ # However, when Application.reset is called, this resets the instance.
37
+ #
38
+ def self.reset ini = nil
39
+ @instance = new ini
40
+ end
41
+
42
+ # Returns Application instance unless explicitly given different ini file
43
+ #
44
+ def self.instance ini = nil
45
+ if @instance && ini && @instance.ini != Pathname(ini).expand_path
46
+ error "Attempt to obtain #{@instance} for different ini: #{ini}"
47
+ end
48
+ @instance ||= new ini
49
+ end
50
+
51
+ # Auto-generated OLE methods:
52
+
53
+ # property UI4 ParserType
54
+ # Get Parser type: � 1 � Plaza; � 2 � Plaza-II (default)
55
+ def ParserType()
56
+ @ole._getproperty(3, [], [])
57
+ end
58
+
59
+ # property VOID ParserType
60
+ # Set Parser type: � 1 � Plaza; � 2 � Plaza-II (default)
61
+ def ParserType=(val)
62
+ @ole._setproperty(3, [val], [VT_UI4])
63
+ end
64
+
65
+ # method VOID StartUp
66
+ # ������������� ���������� P2ClientGate � �����������, ��������� � ���������������� ini-�����.
67
+ # BSTR ini_file_name [IN]
68
+ def StartUp(ini_file) # May be given as a Pathname, call #to_s
69
+ @ole._invoke(1, [ini_file.to_s], [VT_BSTR])
70
+ end
71
+
72
+ # method VOID CleanUp
73
+ # ��������������� ���������� P2ClientGate.
74
+ def CleanUp()
75
+ @ole._invoke(2, [], [])
76
+ end
77
+
78
+ # method IP2Connection CreateP2Connection
79
+ def CreateP2Connection()
80
+ @ole._invoke(4, [], [])
81
+ end
82
+
83
+ # method IP2BLMessage CreateP2BLMessage
84
+ def CreateP2BLMessage()
85
+ @ole._invoke(5, [], [])
86
+ end
87
+
88
+ # method IP2BLMessageFactory CreateP2BLMessageFactory
89
+ def CreateP2BLMessageFactory()
90
+ @ole._invoke(6, [], [])
91
+ end
92
+
93
+ # method IP2DataBuffer CreateP2DataBuffer
94
+ def CreateP2DataBuffer()
95
+ @ole._invoke(7, [], [])
96
+ end
97
+
98
+ # method IP2DataStream CreateP2DataStream
99
+ def CreateP2DataStream()
100
+ @ole._invoke(8, [], [])
101
+ end
102
+
103
+ # method IP2TableSet CreateP2TableSet
104
+ def CreateP2TableSet()
105
+ @ole._invoke(9, [], [])
106
+ end
107
+
108
+ end
109
+ end # module P2
110
+
111
+
@@ -0,0 +1,59 @@
1
+ module P2
2
+
3
+ # This is P2 Base class that defines common functionality.
4
+ # All Ruby P2 classes serve as transparent proxy for OLE objects in P2ClientGate library.
5
+ #
6
+ class Base
7
+ include P2
8
+ include WIN32OLE::VARIANT
9
+
10
+ attr_reader :opts, :ole, :lastargs
11
+
12
+ def initialize opts = {}
13
+ @opts = opts.dup
14
+
15
+ # OLE object may be provided directly (Message)
16
+ @ole = @opts[:ole]
17
+ @ole ||= WIN32OLE.new clsid # (@opts[:lib] || Library.default).find name
18
+
19
+ # Yields self to given block before setting properties (for initialization, etc...)
20
+ yield self if block_given?
21
+
22
+ @opts.each do |key, val|
23
+ # OLE object set properties may be given as options
24
+ setter = "#{key.to_s.camel_case}="
25
+ send(setter, val) if respond_to? setter
26
+
27
+ # OLE object NAMED properties may be given as options (Message#Field)
28
+ prop = key.to_s.camel_case
29
+ if respond_to?(prop) && val.is_a?(Hash)
30
+ val.each do |k, v|
31
+ property = send prop
32
+ property[k.to_s] = v
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ # All unknown methods are routed to composed OLE object
39
+ #
40
+ def method_missing *args
41
+ @ole.send *args
42
+ end
43
+
44
+ # Keeps [OUT] args sent by reference into OLE method
45
+ # s
46
+ def keep_lastargs(return_value)
47
+ @lastargs = WIN32OLE::ARGV
48
+ return_value
49
+ end
50
+
51
+ def clsid
52
+ self.class::CLSID
53
+ end
54
+
55
+ def progid
56
+ self.class::PROGID
57
+ end
58
+ end
59
+ end # module P2
@@ -0,0 +1,250 @@
1
+ module P2
2
+
3
+ # Represents Connection to local P2 Router.
4
+ # Several connections may exist per one Application.
5
+ # �������� ��������� �������, ������� ������������ ����������� ��� �������� � ������
6
+ # � ������������, � ����� ������ � ��������� ���������.
7
+ #
8
+ # Notes: �������� AppName, NodeName, Host, Port, Password � Timeout ������ ���� ������ ��
9
+ # ������� ������ ������ Connect. � ������ ��������� ������ ������� ��� ����, �����
10
+ # ��������� �������� � ���� ���������� �������� ���������������� ����� �������
11
+ # Disconnect � Connect. ��������� �������������� ������� (LoginStr) ������ ����
12
+ # ������ �� ������� ������ ������ Login.
13
+ #
14
+ class Connection < Base
15
+ CLSID = '{CCD42082-33E0-49EA-AED3-9FE39978EB56}'
16
+ PROGID = 'P2ClientGate.P2Connection.1'
17
+
18
+ def initialize opts = {}
19
+
20
+ # First we need to obtain Application singleton (for a given ini file)...
21
+ # Yes, it IS weird - ini file used by Connection is manipulated in Application.
22
+ @app = P2::Application.instance opts[:ini]
23
+
24
+ super opts
25
+ end
26
+
27
+ # Connection and Router status in text format
28
+ #
29
+ def status_text status = @ole.status
30
+ P2::CS_MESSAGES.map { |k, v| (k & status).zero? ? nil : v }.compact.join(', ')
31
+ end
32
+
33
+ # Tests if connection to local Router exists
34
+ #
35
+ def connected?
36
+ @ole.status & P2::CS_CONNECTION_CONNECTED != 0
37
+ end
38
+
39
+ # Tests if local Router is authenticated with RTS server
40
+ #
41
+ def logged?
42
+ @ole.status & P2::CS_ROUTER_CONNECTED != 0
43
+ end
44
+
45
+ # Returns Win32OLE event wrapper for IP2ConnectionEvent event interface
46
+ #
47
+ def events(event_interface = 'IP2ConnectionEvent')
48
+ @events ||= WIN32OLE_EVENT.new(@ole, event_interface)
49
+ end
50
+
51
+ # Auto-generated OLE methods:
52
+
53
+ # property I4 Status
54
+ # ��� ��������� ���������� ��� �������.
55
+ def Status()
56
+ @ole._getproperty(1, [], [])
57
+ end
58
+
59
+ # property BSTR AppName
60
+ # ��� ����������, ��� �������� ���������� ���������� ����������. ��� ����������
61
+ # ������ ���� ���������� � ������ ������ �������.
62
+ def AppName()
63
+ @ole._getproperty(2, [], [])
64
+ end
65
+
66
+ alias Name AppName
67
+ alias name AppName
68
+
69
+ # property BSTR NodeName
70
+ # ��� �������
71
+ def NodeName()
72
+ @ole._getproperty(3, [], [])
73
+ end
74
+
75
+ # property BSTR Host
76
+ # IP-����� ���� ���� UNC-���.
77
+ def Host()
78
+ @ole._getproperty(4, [], [])
79
+ end
80
+
81
+ # property UI4 Port
82
+ # ����� ����� TCP/IP.
83
+ def Port()
84
+ @ole._getproperty(5, [], [])
85
+ end
86
+
87
+ # property UI4 Timeout
88
+ # �������, � ������� �������� ��������� ��������� ���������� ����������.
89
+ def Timeout()
90
+ @ole._getproperty(7, [], [])
91
+ end
92
+
93
+ # property BSTR LoginStr
94
+ # ������ � ������������������ ����������� ������� (�����/������).
95
+ # ������ ������: USERNAME=;PASSWORD=. ��������, USERNAME=3@ivanov;PASSWORD=qwerty.
96
+ def LoginStr()
97
+ @ole._getproperty(8, [], [])
98
+ end
99
+
100
+ # property VOID AppName
101
+ # ��� ����������, ��� �������� ���������� ���������� ����������. ��� ����������
102
+ # ������ ���� ���������� � ������ ������ �������.
103
+ def AppName=(val)
104
+ @ole._setproperty(2, [val], [VT_BSTR])
105
+ end
106
+
107
+ alias Name= AppName=
108
+ alias name= AppName=
109
+
110
+ # property VOID Host
111
+ # IP-����� ���� ���� UNC-���.
112
+ def Host=(val)
113
+ @ole._setproperty(4, [val], [VT_BSTR])
114
+ end
115
+
116
+ # property VOID Port
117
+ # ����� ����� TCP/IP.
118
+ def Port=(val)
119
+ @ole._setproperty(5, [val], [VT_UI4])
120
+ end
121
+
122
+ # property VOID Password
123
+ # ������ ��� ���������� ����������.
124
+ def Password=(val)
125
+ @ole._setproperty(6, [val], [VT_VARIANT])
126
+ end
127
+
128
+ # property VOID Timeout
129
+ # �������, � ������� �������� ��������� ��������� ���������� ����������.
130
+ def Timeout=(val)
131
+ @ole._setproperty(7, [val], [VT_UI4])
132
+ end
133
+
134
+ # property VOID LoginStr
135
+ # ������ � ������������������ ����������� ������� (�����/������).
136
+ # ������ ������: USERNAME=;PASSWORD=. ��������, USERNAME=3@ivanov;PASSWORD=qwerty.
137
+ def LoginStr=(val)
138
+ @ole._setproperty(8, [val], [VT_BSTR])
139
+ end
140
+
141
+ # method UI4 Connect ([out, retval] ULONG* errClass);
142
+ # �������� ���������� ���������� ���������� � ��������.
143
+ # errClass � ����� ������ � ��� ������, ���� ������� ������ ��������� �������� �� P2ERR_OK.
144
+ # ������������ ��������� ������ ������:
145
+ # � 0 (��������� P2MQ_ERRORCLASS_OK) � ����� ����� �������� ���������� ����������
146
+ # ���������� � ���� �� ����������� (��������, ������� ��������� ������� � ������
147
+ # ��������� ���� � �.�.).
148
+ # � 1 (��������� P2MQ_ERRORCLASS_IS_USELESS) � �������� ��������� ������� ����������
149
+ # ���������� �������� � ��� �� �����������, ���������� �������� ��������� �������.
150
+ def Connect()
151
+ @ole._invoke(9, [], [])
152
+ end
153
+
154
+ # method UI4 Connect2
155
+ # �������� ���������� ���������� ���������� � ��������. ������� � ���������� � ������ Connection#Connect.
156
+ # BSTR conn_str [IN]
157
+ def Connect2(conn_str)
158
+ @ole._invoke(18, [conn_str], [VT_BSTR])
159
+ end
160
+
161
+ # method VOID DisconnecT
162
+ # ������ ���������� ����������
163
+ def Disconnect()
164
+ @ole._invoke(10, [], [])
165
+ end
166
+
167
+ # method VOID Login
168
+ # ������������� ����� ������� � ����. ������ ������� ��������� ��������� ����������
169
+ # � ����������� �������� � ����������������� � ����. ��������� ��������������
170
+ # (USERNAME=;PASSWORD=) �������� ��������� LoginStr..
171
+ def Login()
172
+ @ole._invoke(11, [], [])
173
+ end
174
+
175
+ # method VOID Logout
176
+ # ������ ���� ��������� ���������� �������.
177
+ def Logout()
178
+ @ole._invoke(12, [], [])
179
+ end
180
+
181
+ # method VOID ProcessMessage
182
+ # ����� � ��������� ���������, � ��� ����� � ��������������.
183
+ # UI4 cookie [OUT] � ������� � �������������, � ������� �������� ��������� ��������� ���������;
184
+ # UI4 poll_timeout [IN] � ���������� ������������� ����������.
185
+ def ProcessMessage(cookie, poll_timeout)
186
+ keep_lastargs @ole._invoke(13, [cookie, poll_timeout], [VT_BYREF|VT_UI4, VT_UI4])
187
+ end
188
+
189
+ # method UI4 ProcessMessage2 ( [in] ULONG pollTimeout, [out, retval] ULONG* cookie);
190
+ # ����� � ��������� ���������. ������� � ���������� � ������ Connection.ProcessMessage,
191
+ # ��� ��� ��� �� �������� � ������������������ ������ (JScript) �������� ��������� ������ ������� (cookie).
192
+ # UI4 poll_timeout [IN]
193
+ # [out, retval] ULONG* cookie);???????????????????????
194
+ def ProcessMessage2(poll_timeout)
195
+ @ole._invoke(17, [poll_timeout], [VT_UI4])
196
+ end
197
+
198
+ # method UI4 ProcessMessage3
199
+ # ???
200
+ # UI4 poll_timeout [IN]
201
+ def ProcessMessage3(poll_timeout)
202
+ @ole._invoke(19, [poll_timeout], [VT_UI4])
203
+ end
204
+
205
+ # method UI4 RegisterReceiver ( [in] IP2MessageReceiver* newReceiver, [out,retval] ULONG* cookie);
206
+ # ����������� ����������.
207
+ # � cookie � ���������� ������������� ����������. ������������ ��� ����, ����� �����
208
+ # ���� �������� ��������, � ����� ������ �� ���� � ������ Connection.ProcessMessage
209
+ # ������������ ���������� ���������.
210
+ # IP2MessageReceiver new_receiver [IN] � ��������� �� ��������� ��������� ������;
211
+ def RegisterReceiver(new_receiver)
212
+ @ole._invoke(14, [new_receiver], [VT_BYREF|VT_DISPATCH])
213
+ end
214
+
215
+ # method VOID UnRegisterReceiver ([in] ULONG cookie);
216
+ # ������ ����������� ���������� �� �������������� (cookie).
217
+ # UI4 cookie [IN]
218
+ def UnRegisterReceiver(cookie)
219
+ @ole._invoke(15, [cookie], [VT_UI4])
220
+ end
221
+
222
+ # method BSTR ResolveService ( [in] BSTR service, [out,retval] BSTR* address);
223
+ # ��������� ������� ������ ���������� �� ����� �������, ������� ��� �������������.
224
+ # BSTR service [IN] - � ��� �������;
225
+ def ResolveService(service)
226
+ @ole._invoke(16, [service], [VT_BSTR])
227
+ end
228
+
229
+ # HRESULT GetConn
230
+ # OLE_HANDLE p_val [OUT]
231
+ def GetConn(p_val)
232
+ keep_lastargs @ole._invoke(1610678272, [p_val], [VT_BYREF|VT_BYREF|VT_DISPATCH])
233
+ end
234
+
235
+ # HRESULT GetConnPtr
236
+ # OLE_HANDLE p_val [OUT]
237
+ def GetConnPtr(p_val)
238
+ keep_lastargs @ole._invoke(1610678273, [p_val], [VT_BYREF|VT_BYREF|VT_DISPATCH])
239
+ end
240
+
241
+ # method VOID ConnectionStatusChanged - EVENT in IP2ConnectionEvent
242
+ # IP2Connection conn [IN]
243
+ # TConnectionStatus new_status [IN]
244
+ def ConnectionStatusChanged(conn, new_status)
245
+ @ole._invoke(1, [conn, new_status], [VT_BYREF|VT_DISPATCH, VT_DISPATCH])
246
+ end
247
+ end
248
+ end # module P2
249
+
250
+
@@ -0,0 +1,215 @@
1
+ module P2
2
+
3
+ # Represents P2 replication Data Stream.
4
+ # �������� ��������� ������� ������������ ��� ����������� ��������� �������������� ������.
5
+ #
6
+ class DataStream < Base
7
+ CLSID = '{914893CB-0864-4FBB-856A-92C3A1D970F8}'
8
+ PROGID = 'P2ClientGate.P2DataStream.1'
9
+
10
+ def initialize opts = {}
11
+ super opts
12
+ end
13
+
14
+ # Connection and Router status in text format
15
+ #
16
+ def state_text state = self.State
17
+ P2::DS_MESSAGES[state]
18
+ end
19
+
20
+ # Tests if replication stream is in error state
21
+ #
22
+ def error?
23
+ self.State == P2::DS_STATE_ERROR
24
+ end
25
+
26
+ # Tests if replication stream is closed (or un-opened)
27
+ #
28
+ def closed?
29
+ self.State == P2::DS_STATE_CLOSE
30
+ end
31
+
32
+ # Tests if replication stream is opened (please note, it may still be in error state!)
33
+ #
34
+ def opened?
35
+ !closed?
36
+ end
37
+
38
+ alias open? opened?
39
+
40
+ # Returns Win32OLE event wrapper for IP2DataStreamEvents event interface
41
+ #
42
+ def events(event_interface = 'IP2DataStreamEvents')
43
+ @events ||= WIN32OLE_EVENT.new(@ole, event_interface)
44
+ end
45
+
46
+ # Auto-generated OLE methods:
47
+
48
+ # property IP2TableSet TableSet
49
+ # - ����� ������ � ����� ����������. �������� �������� ������� ���������� ����� ��
50
+ # ini-����� (��. �������� COM-������� TableSet) ��� ������������� ��� ���������
51
+ # ����� �� ������� ����������.
52
+ def TableSet()
53
+ table_set = @ole._getproperty(1, [], [])
54
+ P2::TableSet.new :ole => table_set if table_set
55
+ end
56
+
57
+ # property BSTR StreamName � ��� ������ ����������.
58
+ def StreamName()
59
+ @ole._getproperty(2, [], [])
60
+ end
61
+
62
+ alias Name StreamName
63
+ alias name StreamName
64
+
65
+ # property BSTR DBConnString
66
+ # � ������ ���������� � ��. �������� ���������� ��� ���������� � �� ������� �� ����,
67
+ # ����� ������� ������������ ��� ��������� ����������: P2DBSQLite.dll ��� P2DBODBC.dll.
68
+ # ������� � ������ ��������� ������ ������ ��������� ������������� �������
69
+ # ����������� ������� ����������. ����� ������ � �� ������ �� �����, � ����
70
+ # �������� ������ �� ������� ����������. � ���������� ������� �����������
71
+ # IP2DataStreamEvents::StreamDataUpdated �� ����������.
72
+ #
73
+ # ������� �����:
74
+ # 'P2DBSQLite.dll;dbTest.ini;�:\dbTest'
75
+ # 'P2DBODBC.dll;crypto.ini;DRIVER={SQLServer};SERVER=TEST1;DATABASE=crypto;UID=autotest; PWD=autotest'
76
+ #
77
+ def DBConnString()
78
+ @ole._getproperty(3, [], [])
79
+ end
80
+
81
+ # TRequestType type: property Type
82
+ # � ��� ������ ����������. ��� ������ ���������� �������� � ������ ��������� ������
83
+ # (�������/������), � ����� ����� �������� ��������� �� ������� ������� � ���������
84
+ # �� �������.
85
+ #
86
+ def Type()
87
+ @ole._getproperty(4, [], [])
88
+ end
89
+
90
+ # property TDataStreamState State � ��������� ������ ����������.
91
+ def State()
92
+ @ole._getproperty(5, [], [])
93
+ end
94
+
95
+ # property VOID TableSet - ����� ������ � ����� ����������
96
+ def TableSet=(val)
97
+ table = val.respond_to?(:ole) ? val.ole : val
98
+ @ole._setproperty(1, [table], [VT_BYREF|VT_DISPATCH])
99
+ end
100
+
101
+ # property VOID StreamName � ��� ������ ����������.
102
+ def StreamName=(val)
103
+ @ole._setproperty(2, [val], [VT_BSTR])
104
+ end
105
+
106
+ alias Name= StreamName=
107
+ alias name= StreamName=
108
+
109
+ # property VOID DBConnString � ������ ���������� � ��. See DBConnString().
110
+ def DBConnString=(val)
111
+ @ole._setproperty(3, [val], [VT_BSTR])
112
+ end
113
+
114
+ # VOID type: property Type � ��� ������ ����������
115
+ # ???????? Changed signature from Dispatch to Int manually, possible problems?
116
+ # ???????? Also changed name from type to Type, reserved in OLE?
117
+ #
118
+ def Type=(val)
119
+ @ole._setproperty(4, [val], [VT_I4]) #VT_DISPATCH])
120
+ end
121
+
122
+ # method VOID Open
123
+ # �������� ������ �������������� ������.
124
+ # IP2Connection conn [IN] � ��������� �� ��������� ����������.
125
+ def Open(conn)
126
+ conn = conn.respond_to?(:ole) ? conn.ole : conn
127
+ @ole._invoke(6, [conn], [VT_BYREF|VT_DISPATCH])
128
+ end
129
+
130
+ # method VOID Close - �������� ������ �������������� ������.
131
+ def Close()
132
+ @ole._invoke(7, [], [])
133
+ end
134
+
135
+ # HRESULT GetScheme
136
+ # OLE_HANDLE p_val [OUT]
137
+ def GetScheme(p_val)
138
+ keep_lastargs @ole._invoke(1610678272, [p_val], [VT_BYREF|VT_BYREF|VT_DISPATCH])
139
+ end
140
+
141
+ # HRESULT LinkDataBuffer
142
+ # IP2DataStreamEvents data_buff [IN]
143
+ def LinkDataBuffer(data_buff)
144
+ @ole._invoke(1610678273, [data_buff], [VT_BYREF|VT_DISPATCH])
145
+ end
146
+
147
+ # method VOID StreamStateChanged - EVENT in IP2DataStreamEvents
148
+ # IP2DataStream stream [IN]
149
+ # TDataStreamState new_state [IN]
150
+ def StreamStateChanged(stream, new_state)
151
+ @ole._invoke(1, [stream, new_state], [VT_BYREF|VT_DISPATCH, VT_DISPATCH])
152
+ end
153
+
154
+ # method VOID StreamDataInserted - EVENT in IP2DataStreamEvents
155
+ # IP2DataStream stream [IN]
156
+ # BSTR table_name [IN]
157
+ # IP2Record rec [IN]
158
+ def StreamDataInserted(stream, table_name, rec)
159
+ @ole._invoke(2, [stream, table_name, rec], [VT_BYREF|VT_DISPATCH, VT_BSTR, VT_BYREF|VT_DISPATCH])
160
+ end
161
+
162
+ # method VOID StreamDataUpdated - EVENT in IP2DataStreamEvents
163
+ # IP2DataStream stream [IN]
164
+ # BSTR table_name [IN]
165
+ # I8 id [IN]
166
+ # IP2Record rec [IN]
167
+ def StreamDataUpdated(stream, table_name, id, rec)
168
+ @ole._invoke(3, [stream, table_name, id, rec], [VT_BYREF|VT_DISPATCH, VT_BSTR, VT_I8, VT_BYREF|VT_DISPATCH])
169
+ end
170
+
171
+ # method VOID StreamDataDeleted - EVENT in IP2DataStreamEvents
172
+ # IP2DataStream stream [IN]
173
+ # BSTR table_name [IN]
174
+ # I8 id [IN]
175
+ # IP2Record rec [IN]
176
+ def StreamDataDeleted(stream, table_name, id, rec)
177
+ @ole._invoke(4, [stream, table_name, id, rec], [VT_BYREF|VT_DISPATCH, VT_BSTR, VT_I8, VT_BYREF|VT_DISPATCH])
178
+ end
179
+
180
+ # method VOID StreamDatumDeleted - EVENT in IP2DataStreamEvents
181
+ # IP2DataStream stream [IN]
182
+ # BSTR table_name [IN]
183
+ # I8 rev [IN]
184
+ def StreamDatumDeleted(stream, table_name, rev)
185
+ @ole._invoke(5, [stream, table_name, rev], [VT_BYREF|VT_DISPATCH, VT_BSTR, VT_I8])
186
+ end
187
+
188
+ # method VOID StreamDBWillBeDeleted - EVENT in IP2DataStreamEvents
189
+ # IP2DataStream stream [IN]
190
+ def StreamDBWillBeDeleted(stream)
191
+ @ole._invoke(6, [stream], [VT_BYREF|VT_DISPATCH])
192
+ end
193
+
194
+ # method VOID StreamLifeNumChanged - EVENT in IP2DataStreamEvents
195
+ # IP2DataStream stream [IN]
196
+ # I4 life_num [IN]
197
+ def StreamLifeNumChanged(stream, life_num)
198
+ @ole._invoke(7, [stream, life_num], [VT_BYREF|VT_DISPATCH, VT_I4])
199
+ end
200
+
201
+ # method VOID StreamDataBegin - EVENT in IP2DataStreamEvents
202
+ # IP2DataStream stream [IN]
203
+ def StreamDataBegin(stream)
204
+ @ole._invoke(8, [stream], [VT_BYREF|VT_DISPATCH])
205
+ end
206
+
207
+ # method VOID StreamDataEnd - EVENT in IP2DataStreamEvents
208
+ # IP2DataStream stream [IN]
209
+ def StreamDataEnd(stream)
210
+ @ole._invoke(9, [stream], [VT_BYREF|VT_DISPATCH])
211
+ end
212
+ end
213
+ end # module P2
214
+
215
+
@@ -0,0 +1,24 @@
1
+ module P2
2
+ # Represents P2ClientGate OLE type library.
3
+ # Only works with STA version ( Ruby WIN32OLE limitation ).
4
+ class Library < WIN32OLE_TYPELIB
5
+ include P2
6
+
7
+ # Returns default lib if not explicitely instantiated
8
+ #
9
+ def self.default
10
+ @library ||= new
11
+ end
12
+
13
+ def initialize
14
+ p2lib = WIN32OLE_TYPELIB.typelibs.find { |t| t.name =~ /P2ClientGate / }
15
+ error "No registered STA P2ClientGate, please register P2ClientGate.dll" unless p2lib
16
+ super p2lib.name
17
+ end
18
+
19
+ def find name
20
+ self.ole_types.map(&:progid).compact.find { |progid| progid[name] }
21
+ end
22
+
23
+ end # class Library
24
+ end # module P2