SkypeR 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/README +20 -0
- data/bin/iskype.rb +29 -62
- data/bin/iskype.rb.back +170 -0
- data/lib/skyper.rb +2 -1
- data/lib/skyper/command.rb +52 -27
- data/lib/skyper/exception.rb +14 -0
- data/lib/skyper/object.rb +454 -8
- data/lib/skyper/parser.rb +13 -4
- data/lib/skyper/response.rb +44 -18
- data/lib/skyper/service.rb +44 -16
- data/lib/skyper/service.rb.back +127 -0
- data/lib/skyper/service.rb.org +181 -0
- data/rails/init.rb +1 -0
- data/tests/test_parser.rb +22 -13
- metadata +17 -9
data/lib/skyper/parser.rb
CHANGED
@@ -14,7 +14,8 @@ module SkypeR
|
|
14
14
|
class Identifier < Yaparc::AbstractParser
|
15
15
|
def initialize
|
16
16
|
@parser = lambda do
|
17
|
-
Yaparc::Tokenize.new(Yaparc::Ident.new)
|
17
|
+
# Yaparc::Tokenize.new(Yaparc::Ident.new)
|
18
|
+
Yaparc::Regex.new(/\A[0-9a-zA-Z_]+/)
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -50,7 +51,7 @@ module SkypeR
|
|
50
51
|
class CommandID < Yaparc::AbstractParser
|
51
52
|
def initialize
|
52
53
|
@parser = lambda do
|
53
|
-
Yaparc::Tokenize.new(Yaparc::Regex.new(
|
54
|
+
Yaparc::Tokenize.new(Yaparc::Regex.new(/\A#[A-Z0-9]+/))
|
54
55
|
# Yaparc::Token.new(Yaparc::Regex.new(/#[A-Z0-9]+/))
|
55
56
|
end
|
56
57
|
end
|
@@ -60,8 +61,16 @@ module SkypeR
|
|
60
61
|
class ChatID < Yaparc::AbstractParser
|
61
62
|
def initialize
|
62
63
|
@parser = lambda do
|
63
|
-
|
64
|
-
|
64
|
+
# #tk3adapter/$akimichi_tatsukawa;309cfdf0927d827b
|
65
|
+
Yaparc::Seq.new(Yaparc::Literal.new('#'),
|
66
|
+
Identifier.new,
|
67
|
+
Yaparc::Literal.new('/$'),
|
68
|
+
Identifier.new,
|
69
|
+
Yaparc::Literal.new(';'),
|
70
|
+
Yaparc::Regex.new(/\A\w+/)) do |_,sender,_,receiver,_,identifier|
|
71
|
+
"##{sender}/$#{receiver};#{identifier}"
|
72
|
+
# Yaparc::Tokenize.new(Yaparc::Regex.new(/#[A-Za-z]*\/\$[A-Za-z]*;[0-9]*/))
|
73
|
+
end
|
65
74
|
end
|
66
75
|
end
|
67
76
|
end
|
data/lib/skyper/response.rb
CHANGED
@@ -6,7 +6,7 @@ require "logger"
|
|
6
6
|
|
7
7
|
|
8
8
|
=begin
|
9
|
-
|
9
|
+
|
10
10
|
=end
|
11
11
|
|
12
12
|
module SkypeR
|
@@ -46,10 +46,12 @@ module SkypeR
|
|
46
46
|
def initialize
|
47
47
|
@parser = lambda do
|
48
48
|
Yaparc::Seq.new(Yaparc::Symbol.new("USER"),
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
{:identifier => identifier, :property => property, :value => value}
|
49
|
+
Yaparc::Identifier.new,
|
50
|
+
SkypeR::Parser::UserProperty.new,
|
51
|
+
AnyValue.new) do |_,identifier,property, value|
|
52
|
+
#{:identifier => identifier, :property => property, :value => value}
|
53
|
+
SkypeR::Object::User.new(Hash[:handle => identifier, :"#{property}" => value])
|
54
|
+
|
53
55
|
end
|
54
56
|
end
|
55
57
|
end
|
@@ -99,15 +101,15 @@ module SkypeR
|
|
99
101
|
def initialize
|
100
102
|
@parser = lambda do
|
101
103
|
Yaparc::Seq.new(Yaparc::Symbol.new("CHAT"),
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
104
|
+
SkypeR::Parser::ChatID.new,
|
105
|
+
Yaparc::Symbol.new("CHATMESSAGES"),
|
106
|
+
Yaparc::Many.new(
|
107
|
+
Yaparc::Seq.new(Yaparc::Symbol.new(','),
|
108
|
+
Target.new) do |_, target|
|
109
|
+
target
|
110
|
+
end
|
111
|
+
)
|
112
|
+
)
|
111
113
|
end
|
112
114
|
end
|
113
115
|
end
|
@@ -258,20 +260,44 @@ module SkypeR
|
|
258
260
|
|
259
261
|
# <chat_create_response> := CHAT <chat_id> STATUS <value>
|
260
262
|
class ChatCreateResponse < ResponseBase
|
261
|
-
|
263
|
+
attr_accessor :chat_object
|
264
|
+
|
265
|
+
def initialize(chat_object)
|
266
|
+
@chat_object = chat_object
|
262
267
|
@parser = lambda do
|
263
268
|
Yaparc::Seq.new(
|
269
|
+
CommandID.new,
|
264
270
|
Yaparc::Symbol.new("CHAT"),
|
265
|
-
|
271
|
+
SkypeR::Parser::ChatID.new,
|
266
272
|
Yaparc::Symbol.new("STATUS"),
|
267
273
|
AnyValue.new
|
268
|
-
) do |_,
|
269
|
-
|
274
|
+
) do |command_id,_,chat_id,_,status|
|
275
|
+
@chat_object.name = chat_id
|
276
|
+
@chat_object.status = status
|
277
|
+
@chat_object
|
278
|
+
#SkypeR::Object::Chat.new(Hash[:name => chat_id, :status => status]
|
270
279
|
end
|
271
280
|
end
|
272
281
|
end
|
273
282
|
end
|
274
283
|
|
275
284
|
|
285
|
+
# <chat_message_response> := CHATMESSAGE <id> STATUS SENDING
|
286
|
+
class ChatMessageResponse < ResponseBase
|
287
|
+
def initialize
|
288
|
+
@parser = lambda do
|
289
|
+
Yaparc::Seq.new(
|
290
|
+
Yaparc::Symbol.new("CHATMESSAGE"),
|
291
|
+
CallId.new,
|
292
|
+
Yaparc::Symbol.new("STATUS"),
|
293
|
+
Yaparc::Symbol.new("SENDING")
|
294
|
+
) do |_,call_id,_,_|
|
295
|
+
#{:call_id => call_id}
|
296
|
+
SkypeR::Object::ChatMessage.new(Hash[:from_handle => call_id, :status => :sending])
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
276
302
|
end # of Parser
|
277
303
|
end # of Skyper
|
data/lib/skyper/service.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
#require 'uuidtools.rb'
|
3
2
|
require 'uuidtools'
|
4
3
|
require 'rbus.rb'
|
5
4
|
require 'thread.rb'
|
@@ -10,6 +9,12 @@ module SkypeR
|
|
10
9
|
module Service
|
11
10
|
class Application
|
12
11
|
def initialize(name, protocol_num = 5)
|
12
|
+
unless ENV["DBUS_SESSION_BUS_ADDRESS"]
|
13
|
+
output = `dbus-launch --auto-syntax`
|
14
|
+
dbus_session_bus_address, dummy, dbus_session_bus_pid = output.split("\n")
|
15
|
+
ENV["DBUS_SESSION_BUS_ADDRESS"] = dbus_session_bus_address.match(/\ADBUS_SESSION_BUS_ADDRESS='(.*)';\Z/)[1]
|
16
|
+
ENV["DBUS_SESSION_BUS_PID"] = dbus_session_bus_pid.match(/\ADBUS_SESSION_BUS_PID=(.*)*;\Z/)[1]
|
17
|
+
end
|
13
18
|
remote_bus = ::RBus.session_bus
|
14
19
|
service_name = 'com.Skype.API'
|
15
20
|
object_path = "/com/Skype"
|
@@ -19,30 +24,39 @@ module SkypeR
|
|
19
24
|
@invoked_commands = Hash.new
|
20
25
|
end
|
21
26
|
|
27
|
+
|
28
|
+
def execute(command, timeout = 60)
|
29
|
+
|
30
|
+
end
|
31
|
+
|
22
32
|
def invoke(command, timeout = 60)
|
23
33
|
begin
|
24
34
|
::Timeout.timeout(timeout) {
|
25
35
|
authenticate
|
26
|
-
|
27
|
-
|
36
|
+
case result = parse(command)
|
37
|
+
when Yaparc::Result::OK
|
38
|
+
response_parser = result.value[:response_parser]
|
39
|
+
generated_object = result.value[:generated_object]
|
40
|
+
@invoked_commands[command.command_id] = command.statement
|
41
|
+
response_statement = @api_object.Invoke("##{command.command_id} #{command.statement}")
|
42
|
+
# response_parser.parse(response_statement)
|
43
|
+
when Yaparc::Result::Fail
|
44
|
+
raise SkypeR::Exception::ParseError
|
45
|
+
else
|
46
|
+
raise SkypeR::Exception::UnknownError
|
47
|
+
end
|
28
48
|
}
|
49
|
+
rescue SkypeR::Exception::ParseError
|
50
|
+
puts "Parse Error: '#{command.statement}'"
|
51
|
+
[]
|
29
52
|
rescue ::Timeout::Error
|
30
53
|
puts "Connection timeout. Please try again."
|
31
54
|
end
|
32
55
|
end
|
33
56
|
|
34
57
|
|
35
|
-
def parse(
|
36
|
-
|
37
|
-
when CommandMessage
|
38
|
-
command_parser = SkypeR::Parser::CommandStatement.new
|
39
|
-
command_parser.parse(message.statement)
|
40
|
-
when ResponseMessage
|
41
|
-
response_parser = SkypeR::Parser::ResponseCommandStatement.new
|
42
|
-
response_parser.parse(message.statement)
|
43
|
-
else
|
44
|
-
raise
|
45
|
-
end
|
58
|
+
def parse(command_message)
|
59
|
+
command_message.parse
|
46
60
|
end
|
47
61
|
|
48
62
|
def validate(command)
|
@@ -80,9 +94,17 @@ module SkypeR
|
|
80
94
|
|
81
95
|
def initialize(statement)
|
82
96
|
@statement = statement
|
83
|
-
|
97
|
+
# UUID.mac_address = nil
|
98
|
+
# @command_id = UUID.timestamp_create.to_i
|
99
|
+
@command_id = UUID.random_create.to_i
|
84
100
|
end
|
85
|
-
|
101
|
+
|
102
|
+
def parse
|
103
|
+
command_parser = SkypeR::Parser::CommandStatement.new
|
104
|
+
command_parser.parse(@statement)
|
105
|
+
end
|
106
|
+
|
107
|
+
end # of CommandMessage
|
86
108
|
|
87
109
|
|
88
110
|
class ResponseMessage < MessageBase
|
@@ -91,6 +113,12 @@ module SkypeR
|
|
91
113
|
@statement = statement
|
92
114
|
@response_instance = response_instance
|
93
115
|
end
|
116
|
+
|
117
|
+
def parse
|
118
|
+
response_parser = SkypeR::Parser::ResponseCommandStatement.new
|
119
|
+
response_parser.parse(@statement)
|
120
|
+
end
|
121
|
+
|
94
122
|
end # Response
|
95
123
|
|
96
124
|
# class Result < Response
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'uuidtools'
|
3
|
+
require 'rbus.rb'
|
4
|
+
require 'thread.rb'
|
5
|
+
require 'timeout.rb'
|
6
|
+
|
7
|
+
|
8
|
+
module SkypeR
|
9
|
+
module Service
|
10
|
+
class Application
|
11
|
+
def initialize(name, protocol_num = 5)
|
12
|
+
unless ENV["DBUS_SESSION_BUS_ADDRESS"]
|
13
|
+
output = `dbus-launch --auto-syntax`
|
14
|
+
dbus_session_bus_address, dummy, dbus_session_bus_pid = output.split("\n")
|
15
|
+
ENV["DBUS_SESSION_BUS_ADDRESS"] = dbus_session_bus_address.match(/\ADBUS_SESSION_BUS_ADDRESS='(.*)';\Z/)[1]
|
16
|
+
ENV["DBUS_SESSION_BUS_PID"] = dbus_session_bus_pid.match(/\ADBUS_SESSION_BUS_PID=(.*)*;\Z/)[1]
|
17
|
+
end
|
18
|
+
remote_bus = ::RBus.session_bus
|
19
|
+
service_name = 'com.Skype.API'
|
20
|
+
object_path = "/com/Skype"
|
21
|
+
@api_object = remote_bus.get_object(service_name, object_path)
|
22
|
+
@api_object.interface!(service_name)
|
23
|
+
@application_name = name
|
24
|
+
@invoked_commands = Hash.new
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def execute(command, timeout = 60)
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def invoke(command, timeout = 60)
|
33
|
+
begin
|
34
|
+
::Timeout.timeout(timeout) {
|
35
|
+
authenticate
|
36
|
+
case result = parse(command)
|
37
|
+
when Yaparc::Result::OK
|
38
|
+
response_parser = result.value[:response_parser]
|
39
|
+
generated_object = result.value[:generated_object]
|
40
|
+
@invoked_commands[command.command_id] = command.statement
|
41
|
+
response_statement = @api_object.Invoke("##{command.command_id} #{command.statement}")
|
42
|
+
response_parser.parse(response_statement)
|
43
|
+
when Yaparc::Result::Fail
|
44
|
+
raise SkypeR::Exception::ParseError
|
45
|
+
else
|
46
|
+
raise SkypeR::Exception::UnknownError
|
47
|
+
end
|
48
|
+
}
|
49
|
+
rescue ::Timeout::Error
|
50
|
+
puts "Connection timeout. Please try again."
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def parse(command_message)
|
56
|
+
command_message.parse
|
57
|
+
end
|
58
|
+
|
59
|
+
def validate(command)
|
60
|
+
case result = parse(command)
|
61
|
+
when Yaparc::Result::OK
|
62
|
+
true
|
63
|
+
when Yaparc::Result::Fail
|
64
|
+
false
|
65
|
+
else
|
66
|
+
raise
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
def authenticate(protocol_num = 5)
|
72
|
+
result = nil
|
73
|
+
query = Thread.start do
|
74
|
+
name_command = SkypeR::Service::CommandMessage.new("NAME #{@application_name}")
|
75
|
+
result = @api_object.Invoke(name_command.statement)
|
76
|
+
puts result
|
77
|
+
protocol_command = SkypeR::Service::CommandMessage.new("PROTOCOL #{protocol_num}")
|
78
|
+
result = @api_object.Invoke(protocol_command.statement)
|
79
|
+
puts result
|
80
|
+
end
|
81
|
+
query.join
|
82
|
+
end
|
83
|
+
end # of Application
|
84
|
+
|
85
|
+
|
86
|
+
class MessageBase
|
87
|
+
attr_accessor :statement, :command_id
|
88
|
+
end
|
89
|
+
|
90
|
+
class CommandMessage < MessageBase
|
91
|
+
|
92
|
+
def initialize(statement)
|
93
|
+
@statement = statement
|
94
|
+
# UUID.mac_address = nil
|
95
|
+
# @command_id = UUID.timestamp_create.to_i
|
96
|
+
@command_id = UUID.random_create.to_i
|
97
|
+
end
|
98
|
+
|
99
|
+
def parse
|
100
|
+
command_parser = SkypeR::Parser::CommandStatement.new
|
101
|
+
command_parser.parse(@statement)
|
102
|
+
end
|
103
|
+
|
104
|
+
end # of CommandMessage
|
105
|
+
|
106
|
+
|
107
|
+
class ResponseMessage < MessageBase
|
108
|
+
attr_accessor :statement, :response_instance
|
109
|
+
def initialize(statement, response_instance)
|
110
|
+
@statement = statement
|
111
|
+
@response_instance = response_instance
|
112
|
+
end
|
113
|
+
|
114
|
+
def parse
|
115
|
+
response_parser = SkypeR::Parser::ResponseCommandStatement.new
|
116
|
+
response_parser.parse(@statement)
|
117
|
+
end
|
118
|
+
|
119
|
+
end # Response
|
120
|
+
|
121
|
+
# class Result < Response
|
122
|
+
# end
|
123
|
+
|
124
|
+
# class Error < Response
|
125
|
+
# end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# author: Péter Kiss, Akimichi TATSUKAWA
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'uuidtools'
|
5
|
+
#require 'rbus.rb'
|
6
|
+
require 'thread.rb'
|
7
|
+
require 'timeout.rb'
|
8
|
+
#require 'dbus'
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
module SkypeR
|
13
|
+
#{{Szinkron kommunikációnál ennyi sec-t várunk a DBUS-válaszra
|
14
|
+
TIMEOUT = 15
|
15
|
+
#}}
|
16
|
+
module Service
|
17
|
+
class Application
|
18
|
+
#async [] pufferek
|
19
|
+
attr_accessor :missed_chats,:missed_messages,:connstatus
|
20
|
+
|
21
|
+
def initialize(name, protocol_num = 5)
|
22
|
+
|
23
|
+
@missed_chats = []
|
24
|
+
@missed_messages = []
|
25
|
+
@missed_chats_puff = []
|
26
|
+
@connstatus = []
|
27
|
+
@global_res = []
|
28
|
+
|
29
|
+
# remote_bus = ::RBus.session_bus
|
30
|
+
# service_dbus = remote_bus.service('org.freedesktop.DBus')
|
31
|
+
remote_bus = ::DBus.session_bus
|
32
|
+
service_dbus = remote_bus_dbus.request_service("com.Skype.API.Client")
|
33
|
+
|
34
|
+
#és elkérjük a skype service-t
|
35
|
+
skype_service_name = 'com.Skype.API'
|
36
|
+
object_path = '/com/Skype'
|
37
|
+
@api_object = remote_bus.get_object(skype_service_name, object_path)
|
38
|
+
|
39
|
+
#Notify-k kezelése
|
40
|
+
#
|
41
|
+
# << %GÅ%@ ezen hív minket befelé
|
42
|
+
@api_object.connect!(:Notify, :member => 'Notify', :type => 'method_call', :path => '/com/Skype/Client', :interface => 'com.Skype.API.Client') {|s|
|
43
|
+
my_arr = s.split()
|
44
|
+
# puts s
|
45
|
+
if my_arr.size == 2 and not ((my_arr[0] =~ /#/) == 0)
|
46
|
+
#Státusz üzenet. köszönjük
|
47
|
+
var,value = my_arr
|
48
|
+
#instance_eval("puts 'Status changed #{var}->#{value}' if defined?(@#{var.downcase}) and @#{var.downcase} != '#{value}'")
|
49
|
+
# instance_eval("@#{var.downcase}='#{value}'")
|
50
|
+
@connstatus_last = value
|
51
|
+
Thread.exclusive(){ @connstatus << value if @connstatus_last != value} if var == 'CONNSTATUS'
|
52
|
+
return ['']
|
53
|
+
else
|
54
|
+
#hogyha nekünk érkezett vmi id-vel válasz, akkor tároljuk csak le.
|
55
|
+
if( (my_arr[0] =~ /#/) == 0)
|
56
|
+
Thread.exclusive(){@global_res << s}
|
57
|
+
else
|
58
|
+
s.gsub(/CHAT\s([^\s]*)\sACTIVITY_TIMESTAMP\s([0-9]*)/){
|
59
|
+
chat_id,ts,ts = $1,$2,$3
|
60
|
+
Thread.exclusive(){ @missed_chats_puff << chat_id }
|
61
|
+
print 'iC'
|
62
|
+
return ['']
|
63
|
+
}
|
64
|
+
s.gsub(/CHATMESSAGE\s([0-9]+)\sSTATUS\sRECEIVED/){
|
65
|
+
msg_id = $1
|
66
|
+
Thread.exclusive(){
|
67
|
+
@missed_chats << @missed_chats_puff.delete_at(0)
|
68
|
+
@missed_messages << msg_id
|
69
|
+
}
|
70
|
+
print 'im'
|
71
|
+
return ['']
|
72
|
+
}
|
73
|
+
|
74
|
+
#ezek a kliensen történ%GÅ%@ egyéb események hatására érkez%GÅ%@ infók, amit nem kezelünk (még)
|
75
|
+
puts s
|
76
|
+
#return ['']
|
77
|
+
end
|
78
|
+
end
|
79
|
+
return ['']
|
80
|
+
}
|
81
|
+
# >> mi ezen kommunikálunk kifelé
|
82
|
+
@api_object.interface!(skype_service_name)
|
83
|
+
@application_name = name
|
84
|
+
# @invoked_commands = Hash.new
|
85
|
+
end
|
86
|
+
# ez itt egy dbus-os service publikálás és hívás.
|
87
|
+
# mivel sikerült m%Gű%@ködésre bírni az RBus-szal ezért erre nincs szükség.
|
88
|
+
def init_callback
|
89
|
+
STDOUT.sync = true
|
90
|
+
remote_bus_dbus = ::DBus.session_bus
|
91
|
+
my_service = remote_bus_dbus.request_service("com.Skype.API.Client")
|
92
|
+
exported_obj = Test.new('/com/Skype/Client')
|
93
|
+
my_service.export(exported_obj)
|
94
|
+
Thread.new do
|
95
|
+
begin
|
96
|
+
main = DBus::Main.new
|
97
|
+
main << remote_bus_dbus
|
98
|
+
main.run
|
99
|
+
rescue Exception => e
|
100
|
+
puts e.message
|
101
|
+
puts "Backtrace:"
|
102
|
+
e.backtrace.each {|line| puts line }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
ms = remote_bus_dbus.service('com.Skype.API.Client')
|
106
|
+
o = ms.object('/com/Skype/Client')
|
107
|
+
o.introspect
|
108
|
+
o.default_iface = 'com.Skype.API.Client'
|
109
|
+
o.Notify 'szevasz'
|
110
|
+
end
|
111
|
+
|
112
|
+
# segéd fv. biztonságosan ránéz az aktuális üzenetre és true,ha nekünk jött
|
113
|
+
def not_for_us_thread_safe_sync command_id
|
114
|
+
Thread.exclusive(){
|
115
|
+
@res == nil or (@res.split[0] != "##{command_id}")
|
116
|
+
}
|
117
|
+
end
|
118
|
+
|
119
|
+
# segéd fv. biztonságosan ránéz az aktuális üzenetre és true,ha nekünk jött
|
120
|
+
def not_for_us_thread_safe_async command_id
|
121
|
+
Thread.exclusive(){
|
122
|
+
@global_res.empty? or !@global_res.select{|s| s.split[0] == "##{command_id}"}
|
123
|
+
}
|
124
|
+
end
|
125
|
+
|
126
|
+
#asynchron message handleing to avoid skype for hang
|
127
|
+
def invoke(command, timeout = TIMEOUT)
|
128
|
+
@global_res = []
|
129
|
+
begin
|
130
|
+
::Timeout.timeout(timeout) {
|
131
|
+
|
132
|
+
authenticate
|
133
|
+
|
134
|
+
command_string = "##{command.command_id} #{command.statement}"
|
135
|
+
#puts command_string
|
136
|
+
@api_object.Invoke(command_string){|async_result|
|
137
|
+
@res = nil
|
138
|
+
|
139
|
+
while @res == nil do
|
140
|
+
Thread.pass
|
141
|
+
@res = async_result.dup
|
142
|
+
end
|
143
|
+
}
|
144
|
+
# megvárjuk, amíg jön valami értelmes.
|
145
|
+
# az "" is értelmes, lásd lentebb
|
146
|
+
while not_for_us_thread_safe_sync(command.command_id) do
|
147
|
+
break if @res == ""
|
148
|
+
Thread.pass
|
149
|
+
end
|
150
|
+
return @res if @res != ""
|
151
|
+
}
|
152
|
+
# "" -> ide akkor jutunk, ha asszinkron
|
153
|
+
# visszahívásra várunk ezért most várjuk, hogy
|
154
|
+
# megérkezzék az adat.
|
155
|
+
while not_for_us_thread_safe_async(command.command_id) do
|
156
|
+
#had játszadozzon üzenetküldéssel a skype, ha akar, mégiscsak ez egy asszinkron üzenet..
|
157
|
+
sleep(1)
|
158
|
+
|
159
|
+
Thread.pass
|
160
|
+
end
|
161
|
+
Thread.exclusive(){
|
162
|
+
@res = @global_res.select{|s| s.split[0] == "##{command.command_id}"}.shift.dup
|
163
|
+
}
|
164
|
+
return @res
|
165
|
+
rescue ::Timeout::Error
|
166
|
+
print 't' if DEBUG == true
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def authenticate(protocol_num = 5)
|
171
|
+
result = nil
|
172
|
+
name_command = SkypeR::Service::CommandMessage.new("NAME #{@application_name}")
|
173
|
+
result = @api_object.Invoke(name_command.statement)
|
174
|
+
puts result unless result =~ /PROTOCOL|OK/
|
175
|
+
protocol_command = SkypeR::Service::CommandMessage.new("PROTOCOL #{protocol_num}")
|
176
|
+
result = @api_object.Invoke(protocol_command.statement)
|
177
|
+
puts result unless result =~ /PROTOCOL|OK/
|
178
|
+
end
|
179
|
+
end # of Application
|
180
|
+
end
|
181
|
+
end
|