mrpin-sdk 0.3.141 → 1.0.2

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 (124) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +47 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +65 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/stylesheets/mrpin/sign_in.css +32 -0
  8. data/app/assets/stylesheets/mrpin.css.scss +3 -0
  9. data/app/views/devise/sessions/new.html.erb +16 -0
  10. data/app/views/layouts/devise.html.erb +12 -0
  11. data/lib/mrpin/all_files.rb +48 -0
  12. data/lib/mrpin/api/base/api_object.rb +48 -0
  13. data/lib/mrpin/api/base/handler_base.rb +86 -0
  14. data/lib/mrpin/api/base/request_base.rb +15 -0
  15. data/lib/mrpin/api/base/response_base.rb +29 -0
  16. data/lib/mrpin/api/bundles/init/handler_bundles_init.rb +36 -0
  17. data/lib/mrpin/api/bundles/init/request_bundles_init.rb +7 -0
  18. data/lib/mrpin/api/bundles/init/response_bundles_init.rb +5 -0
  19. data/lib/mrpin/api/packs/requests_pack.rb +38 -0
  20. data/lib/mrpin/api/packs/responses_pack.rb +38 -0
  21. data/lib/mrpin/api/platform/base/handler_platform_base.rb +26 -0
  22. data/lib/mrpin/api/platform/base/request_platform_base.rb +54 -0
  23. data/lib/mrpin/api/platform/report/handler_report_error.rb +74 -0
  24. data/lib/mrpin/api/platform/report/request_report_error.rb +20 -0
  25. data/lib/mrpin/api/standard/response_error.rb +19 -0
  26. data/lib/mrpin/api/standard/response_ok.rb +18 -0
  27. data/lib/mrpin/api/standard/response_session_end.rb +21 -0
  28. data/lib/mrpin/api/standard/response_with_url_data.rb +7 -0
  29. data/lib/mrpin/api/system/echo/handler_system_echo.rb +25 -0
  30. data/lib/mrpin/api/system/echo/request_system_echo.rb +19 -0
  31. data/lib/mrpin/config/initializers/00_carrier_wave.rb +4 -0
  32. data/lib/mrpin/config/initializers/01_devise.rb +264 -0
  33. data/lib/mrpin/config/initializers/02_mongo.rb +2 -0
  34. data/lib/mrpin/config/initializers/03_i18n.rb +3 -0
  35. data/lib/mrpin/config/initializers.rb +7 -0
  36. data/lib/mrpin/config/locales/rails_admin.en.yml +10 -0
  37. data/lib/mrpin/controllers/application_controller_base.rb +14 -0
  38. data/lib/mrpin/controllers/system_controller_base.rb +222 -0
  39. data/lib/mrpin/core/admin/admin_user.rb +39 -0
  40. data/lib/mrpin/core/admin/e_admin_user_role.rb +4 -0
  41. data/lib/mrpin/core/app_config_base.rb +48 -0
  42. data/lib/mrpin/core/app_info/app_info_base.rb +413 -0
  43. data/lib/mrpin/core/app_info/e_app_state.rb +13 -0
  44. data/lib/mrpin/core/base/amf_serializable.rb +16 -0
  45. data/lib/mrpin/core/base/enum_base.rb +12 -0
  46. data/lib/mrpin/core/base/info_base.rb +18 -0
  47. data/lib/mrpin/core/base/manager_base.rb +74 -0
  48. data/lib/mrpin/core/base/manager_with_json_data.rb +98 -0
  49. data/lib/mrpin/core/base/model_base.rb +219 -0
  50. data/lib/mrpin/core/bundles/bundle_base.rb +197 -0
  51. data/lib/mrpin/core/bundles/bundle_info_base.rb +29 -0
  52. data/lib/mrpin/core/bundles/e_build_type.rb +7 -0
  53. data/lib/mrpin/core/bundles/manager_bundles_base.rb +56 -0
  54. data/lib/mrpin/core/constants/constants_remote.rb +14 -0
  55. data/lib/mrpin/core/currency_exchanger/base/exchanger_base.rb +21 -0
  56. data/lib/mrpin/core/currency_exchanger/currency_exchanger.rb +40 -0
  57. data/lib/mrpin/core/currency_exchanger/e_currency_type.rb +8 -0
  58. data/lib/mrpin/core/currency_exchanger/fixer/exchanger_fixer.rb +40 -0
  59. data/lib/mrpin/core/currency_exchanger/local/exchanger_local.rb +23 -0
  60. data/lib/mrpin/core/currency_exchanger/yahoo/exchanger_yahoo.rb +34 -0
  61. data/lib/mrpin/core/exceptions/assertion_error.rb +3 -0
  62. data/lib/mrpin/core/extensions/hash.rb +25 -0
  63. data/lib/mrpin/core/extensions/mongoid_id_alias.rb +7 -0
  64. data/lib/mrpin/core/extensions/object.rb +57 -0
  65. data/lib/mrpin/core/extensions/thread.rb +23 -0
  66. data/lib/mrpin/core/extensions/time.rb +5 -0
  67. data/lib/mrpin/core/logger/logger_sdk.rb +14 -0
  68. data/lib/mrpin/core/platform/e_platform_type.rb +14 -0
  69. data/lib/mrpin/core/player/e_player_role.rb +7 -0
  70. data/lib/mrpin/core/player/e_sex_type.rb +7 -0
  71. data/lib/mrpin/core/player/player_statistic_base.rb +50 -0
  72. data/lib/mrpin/core/purchase/e_sale_type.rb +7 -0
  73. data/lib/mrpin/core/remote/e_response_type.rb +4 -0
  74. data/lib/mrpin/core/remote/http/manager_remote_http.rb +107 -0
  75. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_api.rb +43 -0
  76. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_disconnect.rb +69 -0
  77. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb +155 -0
  78. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_sessions.rb +41 -0
  79. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_statistic.rb +41 -0
  80. data/lib/mrpin/core/remote/socket/base/extensions/network_interface_helper.rb +53 -0
  81. data/lib/mrpin/core/remote/socket/base/manager_remote_socket_base.rb +131 -0
  82. data/lib/mrpin/core/remote/socket/base/socket_client_base.rb +181 -0
  83. data/lib/mrpin/core/remote/socket/base/socket_client_crossdomain.rb +33 -0
  84. data/lib/mrpin/core/remote/socket/flash/manager_remote_socket_flash.rb +51 -0
  85. data/lib/mrpin/core/remote/socket/flash/socket_client_flash.rb +21 -0
  86. data/lib/mrpin/core/remote/socket/unity/manager_remote_socket_unity.rb +58 -0
  87. data/lib/mrpin/core/remote/socket/unity/socket_client_unity.rb +19 -0
  88. data/lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb +101 -0
  89. data/lib/mrpin/core/remote/socket/websocket/socket_client_web_sockets.rb +129 -0
  90. data/lib/mrpin/core/remote/socket/with_policy/socket_client_with_policy.rb +66 -0
  91. data/lib/mrpin/core/review.rb +231 -0
  92. data/lib/mrpin/core/scheduler/manager_scheduler.rb +66 -0
  93. data/lib/mrpin/core/statistic/error_client_base.rb +136 -0
  94. data/lib/mrpin/core/statistic/error_server_base.rb +93 -0
  95. data/lib/mrpin/core/statistic/manager_statistics_base.rb +221 -0
  96. data/lib/mrpin/core/statistic/statistic_application_base.rb +88 -0
  97. data/lib/mrpin/core/statistic/statistic_config_base.rb +38 -0
  98. data/lib/mrpin/core/statistic/system_handler_profiler.rb +85 -0
  99. data/lib/mrpin/core/string/e_language_type.rb +29 -0
  100. data/lib/mrpin/core/string/e_string_type_base.rb +14 -0
  101. data/lib/mrpin/core/string/localization_base.rb +77 -0
  102. data/lib/mrpin/core/string/localization_base_map.rb +303 -0
  103. data/lib/mrpin/core/string/manager_string_base.rb +159 -0
  104. data/lib/mrpin/core/threads/thread_with_task.rb +62 -0
  105. data/lib/mrpin/core/uploaders/aws/aws_file_info.rb +16 -0
  106. data/lib/mrpin/core/uploaders/aws/aws_uploader.rb +229 -0
  107. data/lib/mrpin/core/uploaders/carrierwave/file_uploader.rb +7 -0
  108. data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_base.rb +66 -0
  109. data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_local.rb +111 -0
  110. data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_s3.rb +87 -0
  111. data/lib/mrpin/core/uploaders/carrierwave/zip_uploader.rb +10 -0
  112. data/lib/mrpin/core/utils/mongo.rb +41 -0
  113. data/lib/mrpin/core/utils/sorter_base.rb +344 -0
  114. data/lib/mrpin/core/utils/utils_io.rb +27 -0
  115. data/lib/mrpin/core/utils/utils_string.rb +17 -0
  116. data/lib/mrpin/core/utils/utils_zip.rb +58 -0
  117. data/lib/mrpin/libs/rails_admin/localization.rb +70 -0
  118. data/lib/mrpin/libs.rb +11 -0
  119. data/lib/mrpin/rails/engine.rb +11 -0
  120. data/lib/mrpin/vendors.rb +19 -0
  121. data/lib/mrpin/version.rb +3 -0
  122. data/lib/mrpin-sdk.rb +6 -0
  123. data/mrpin-sdk.gemspec +54 -0
  124. metadata +163 -96
@@ -0,0 +1,69 @@
1
+ module ManagerRemoteSocketDisconnect
2
+
3
+ #
4
+ # properties
5
+ #
6
+
7
+ #
8
+ # methods
9
+ #
10
+
11
+ protected
12
+ def send_response_and_close(session, response)
13
+ session.should_disconnect_session = false
14
+ session.send_response(response)
15
+ session.close_connection_after_writing
16
+
17
+ nil
18
+ end
19
+
20
+ public
21
+ def disconnect_inactive
22
+ response = Api::ResponseSessionEnd.new
23
+ response.description = EStringTypeBase::EST_ERROR_PLAYER_INACTIVE
24
+
25
+ inactive_players_count = 0
26
+
27
+ @sessions_locker.synchronize do
28
+
29
+ time_last_request = Time.now.to_i - 20.minutes
30
+
31
+ @sessions.reject! do |session|
32
+
33
+ result = session.time_last_request < time_last_request
34
+
35
+ if result
36
+ send_response_and_close(session, response)
37
+
38
+ inactive_players_count += 1
39
+ end #if
40
+
41
+ result
42
+ end #reject!
43
+
44
+ end #mutex
45
+
46
+ @logger.info "disconnect inactive #{inactive_players_count} players"
47
+
48
+ nil
49
+ end
50
+
51
+ public
52
+ def disconnect_all_with_message(message)
53
+ response = Api::ResponseSessionEnd.new
54
+ response.description = message
55
+
56
+ @logger.info "disconnect all with #{message}"
57
+
58
+ @sessions_locker.synchronize do
59
+ @sessions.each do |session|
60
+ send_response_and_close(session, response)
61
+ end
62
+
63
+ @sessions.clear
64
+ end
65
+
66
+ nil
67
+ end
68
+
69
+ end
@@ -0,0 +1,155 @@
1
+ module ManagerRemoteSocketHandle
2
+
3
+ #
4
+ # properties
5
+ #
6
+
7
+ public
8
+ def requests_pending
9
+ result = 0
10
+
11
+ @sessions_with_requests_locker.synchronize do
12
+ result = @sessions_with_requests.size
13
+ end
14
+
15
+ result
16
+ end
17
+
18
+ #
19
+ # events
20
+ #
21
+
22
+ protected
23
+ def on_request_handler_is_nil(session, request, request_id)
24
+ error = "can't find handler for request: #{request.class}"
25
+
26
+ AppInfo.instance.on_server_error(error)
27
+
28
+ session.send_response_error(request_id, error)
29
+
30
+ nil
31
+ end
32
+
33
+ #
34
+ # methods
35
+ #
36
+
37
+ private
38
+ def init_handle
39
+ @sessions_with_requests = []
40
+ @sessions_with_requests_locker = Mutex.new
41
+
42
+ nil
43
+ end
44
+
45
+ protected
46
+ def create_handler(index)
47
+ result = ThreadWithTask.new(0.01, "thread_remote_handler_#{index}", 0.01)
48
+
49
+ result.run do
50
+ session = nil
51
+
52
+ @sessions_with_requests_locker.synchronize do
53
+ session = @sessions_with_requests.shift
54
+ end
55
+
56
+ next if session.nil?
57
+
58
+ requests = session.get_requests
59
+
60
+ requests.each do |request|
61
+
62
+ if Rails.env.development?
63
+ request.report_log("received\t") if request.respond_to?(:report_log)
64
+ end
65
+
66
+ try_handle_request(session, request)
67
+
68
+ end #synchronize
69
+
70
+ nil #for prevent return other value
71
+
72
+ end #thread
73
+
74
+ result
75
+ end
76
+
77
+
78
+ protected
79
+ def try_handle_request(session, request)
80
+ if request.nil?
81
+ AppInfo.instance.on_server_error('request should be non nil')
82
+ return
83
+ end
84
+
85
+ begin
86
+
87
+ handler = @handlers_map[request.class]
88
+
89
+ if handler.nil? #something wrong
90
+
91
+ request_id = -1
92
+
93
+ if request.is_a? AMF::HashWithType
94
+ request_id = request[:request_id]
95
+
96
+ @logger.warn "you forgot register class #{request.class_type}"
97
+ elsif request.respond_to?(:request_id)
98
+ request_id = request.request_id
99
+ end
100
+
101
+ on_request_handler_is_nil(session, request, request_id)
102
+
103
+ else #just handle request
104
+ handler.handle_request(session, request)
105
+ handler.post_handle(Time.now)
106
+ end
107
+
108
+ rescue Exception => e
109
+
110
+ player_id = nil
111
+
112
+ if session.respond_to?(:player) && !session.player.nil?
113
+ player_id = session.player.id
114
+ end
115
+
116
+ if player_id.nil?
117
+ player_id = request.player_id if request.respond_to?(:player_id)
118
+ end
119
+
120
+ AppInfo.instance.on_server_error(e.to_s, e, request, player_id)
121
+
122
+ request_id = request.respond_to?(:request_id) ? request.request_id : -1
123
+
124
+ #send error if can't handle
125
+ session.send_response_error(request_id, EStringTypeBase::EST_ERROR_UNKNOWN)
126
+
127
+ end
128
+
129
+ nil
130
+ end
131
+
132
+ protected
133
+ def check_request_class(request)
134
+ return if request.is_a?(Api::RequestBase)
135
+
136
+ if request.is_a?(AMF::HashWithType)
137
+ assert(false, "You forgot register request class #{request.class_type}")
138
+ else
139
+ assert(false, "Unsupported request class #{request.class}")
140
+ end
141
+
142
+ nil
143
+ end
144
+
145
+ public
146
+ def handle_data_from(session)
147
+ @sessions_with_requests_locker.synchronize do
148
+ @sessions_with_requests << session
149
+ end
150
+
151
+ nil
152
+ end
153
+
154
+
155
+ end
@@ -0,0 +1,41 @@
1
+ module ManagerRemoteSocketSessions
2
+
3
+ #
4
+ # properties
5
+ #
6
+
7
+ #
8
+ # events
9
+ #
10
+
11
+ public
12
+ def on_client_connected(session)
13
+ @sessions_locker.synchronize do
14
+ @sessions << session
15
+ end
16
+
17
+ nil
18
+ end
19
+
20
+ public
21
+ def on_client_disconnected(session)
22
+ @sessions_locker.synchronize do
23
+ @sessions.delete(session)
24
+ end
25
+
26
+ nil
27
+ end
28
+
29
+ #
30
+ # methods
31
+ #
32
+
33
+ public
34
+ def init_sessions
35
+ @sessions = []
36
+ @sessions_locker = Mutex.new
37
+
38
+ nil
39
+ end
40
+
41
+ end
@@ -0,0 +1,41 @@
1
+ module ManagerRemoteSocketStatistic
2
+
3
+ #
4
+ # properties
5
+ #
6
+
7
+ #
8
+ # methods
9
+ #
10
+
11
+ public
12
+ def store_handler_profiler_data
13
+ return unless Rails.env.production?
14
+
15
+ timestamp = Time.now.to_i
16
+
17
+ handlers = @handlers_map.values
18
+
19
+ handlers.each do |handler|
20
+
21
+ next if handler.requests_count == 0
22
+
23
+ handle_stats = SystemHandlerProfiler.new
24
+
25
+ handle_stats.handler = handler.class.to_s
26
+ handle_stats.requests_count = handler.requests_count
27
+ handle_stats.requests_handle_duration_ms = handler.handle_duration_total
28
+ handle_stats.requests_handle_duration_max = handler.handle_duration_max
29
+ handle_stats.requests_handle_duration_min = handler.handle_duration_min
30
+ handle_stats.requests_handle_duration_avg = handler.handle_duration_total / handle_stats.requests_count
31
+
32
+ handle_stats.timestamp = timestamp
33
+
34
+ handle_stats.save!
35
+
36
+ handler.reset_handler_stats
37
+
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,53 @@
1
+ module NetworkInterfaceHelper
2
+
3
+ protected
4
+ def get_ip
5
+ result = self.my_first_public_ipv4
6
+
7
+ result = self.my_first_private_ipv4 if result.nil?
8
+
9
+ result = '127.0.0.1' if result.nil?
10
+
11
+ result
12
+ end
13
+
14
+ protected
15
+ def my_first_private_ipv4
16
+ result = nil
17
+
18
+ addr_info = Socket.ip_address_list.detect do |intf|
19
+ intf.ipv4_private?
20
+ end
21
+
22
+ result = addr_info.ip_address unless addr_info.nil?
23
+
24
+ result
25
+ end
26
+
27
+ protected
28
+ def my_first_public_ipv4
29
+ result = nil
30
+
31
+ addr_info = Socket.ip_address_list.detect do |intf|
32
+ intf.ipv4? and !intf.ipv4_loopback? and !intf.ipv4_multicast? and !intf.ipv4_private?
33
+ end
34
+
35
+ result = addr_info.ip_address unless addr_info.nil?
36
+
37
+ result
38
+ end
39
+
40
+ protected
41
+ def my_public_ipv4_aws
42
+ result = nil
43
+
44
+ begin
45
+ result = `wget -qO- http://instance-data/latest/meta-data/public-ipv4`
46
+ rescue Exception => e
47
+ AppInfo.instance.on_server_error(e, e)
48
+ end
49
+
50
+ result
51
+ end
52
+
53
+ end
@@ -0,0 +1,131 @@
1
+ class ManagerRemoteSocketBase < ManagerBase
2
+
3
+ include ManagerRemoteSocketApi
4
+ include ManagerRemoteSocketDisconnect
5
+ include ManagerRemoteSocketHandle
6
+ include ManagerRemoteSocketSessions
7
+ include ManagerRemoteSocketStatistic
8
+ include NetworkInterfaceHelper
9
+
10
+ #
11
+ # Properties
12
+ #
13
+
14
+ attr_reader :ip
15
+ attr_reader :port
16
+ attr_reader :port_secure
17
+
18
+ attr_reader :sessions
19
+
20
+ protected
21
+ def default_port
22
+ assert(false, 'please override')
23
+ end
24
+
25
+ protected
26
+ def server_type
27
+ 'unknown'
28
+ end
29
+
30
+ #
31
+ # Events
32
+ #
33
+
34
+ public
35
+ def on_client_request_policy(session)
36
+ #do nothing
37
+ end
38
+
39
+ public
40
+ def on_server_shutdown
41
+ super
42
+
43
+ disconnect_all_with_message(EStringTypeBase::EST_ERROR_SERVER_SHUTDOWN)
44
+
45
+ nil
46
+ end
47
+
48
+ public
49
+ def on_server_maintenance_on
50
+ self.disconnect_all_with_message(EStringTypeBase::EST_ERROR_SERVER_ON_MAINTENANCE)
51
+
52
+ nil
53
+ end
54
+
55
+ #
56
+ # Methods
57
+ #
58
+
59
+ # default constructor
60
+ public
61
+ def initialize
62
+ super
63
+
64
+ init_api
65
+ init_handle
66
+ init_sessions
67
+ end
68
+
69
+ public
70
+ def post_init
71
+ super
72
+
73
+ register_classes
74
+ register_handlers
75
+
76
+ Constants::THREADS_HANDLERS_COUNT.times do |n|
77
+ create_handler(n)
78
+ end
79
+
80
+ nil
81
+ end
82
+
83
+ def start!(callback = nil)
84
+ begin
85
+ descriptor_size = EventMachine.set_descriptor_table_size(60000)
86
+
87
+ @logger.info "descriptors size is #{descriptor_size}"
88
+
89
+ rescue Exception => e
90
+ AppInfo.instance.on_server_error(e.to_s, e)
91
+ end
92
+ end
93
+
94
+ protected
95
+ def start_server_on_port(port, client_class, continue_after_error = true, callback = nil)
96
+ thread = Thread.new do
97
+
98
+ client_class.manager_remote = self if client_class.respond_to?('manager_remote=')
99
+
100
+ begin
101
+
102
+ EventMachine.epoll
103
+
104
+ EventMachine.run do
105
+
106
+ ip = '0.0.0.0'
107
+
108
+ EventMachine.start_server(ip, port, client_class)
109
+
110
+ @logger.info "server #{self.server_type}\t\tstarted on #{ip}:#{port}"
111
+
112
+ callback.call unless callback.nil?
113
+ end
114
+ rescue Exception => e
115
+ message = "error on server #{ip}:#{port} thread: #{e}"
116
+
117
+ AppInfo.instance.on_server_error(message, e)
118
+
119
+ sleep 10
120
+
121
+ retry if continue_after_error
122
+
123
+ end
124
+ end
125
+
126
+ thread.name = "thread_remote_server_#{ip}:#{port}"
127
+
128
+ nil
129
+ end
130
+
131
+ end
@@ -0,0 +1,181 @@
1
+ class SocketClientBase < EM::Connection
2
+
3
+ #
4
+ # static fields
5
+ #
6
+
7
+ public
8
+ def self.manager_remote=(value)
9
+ @manager_remote = value
10
+ end
11
+
12
+ public
13
+ def self.manager_remote
14
+ @manager_remote
15
+ end
16
+
17
+ #
18
+ # Properties
19
+ #
20
+ attr_reader :time_last_request
21
+ attr_reader :ip
22
+
23
+ #use for disconnect_inactive_players and on_application_exit
24
+ attr_accessor :should_disconnect_session
25
+
26
+ attr_accessor :player
27
+
28
+ public
29
+ def is_online?
30
+ @is_online
31
+ end
32
+
33
+ #
34
+ # Events
35
+ #
36
+
37
+ protected
38
+ def on_get_requests_error(e)
39
+ AppInfo.instance.on_server_error("Error on get_requests #{e}", e)
40
+ end
41
+
42
+ #
43
+ # Methods
44
+ #
45
+
46
+ # default constructor
47
+ public
48
+ def post_init
49
+ @logger = AppInfo.instance.logger
50
+
51
+ @requests_locker = Mutex.new
52
+
53
+ @is_online = true
54
+
55
+ @time_last_request = Time.now.to_i
56
+
57
+ @should_disconnect_session = true
58
+
59
+ @manager_remote = self.class.manager_remote
60
+ @manager_remote.on_client_connected(self)
61
+
62
+ @data_buffer = ''
63
+
64
+ @player = nil
65
+
66
+ init_ip
67
+
68
+ nil
69
+ end
70
+
71
+ protected
72
+ def init_ip
73
+ init_ip_internal(get_peername)
74
+
75
+ nil
76
+ end
77
+
78
+ protected
79
+ def init_ip_internal(peername)
80
+ @ip = Socket.unpack_sockaddr_in(get_peername).last rescue '0.0.0.0'
81
+
82
+ @logger.info "connection from #{@ip} complete"
83
+
84
+ nil
85
+ end
86
+
87
+ public
88
+ def receive_data(data)
89
+ @time_last_request = Time.now.to_i
90
+
91
+ @requests_locker.synchronize do
92
+ @data_buffer += data
93
+ end
94
+
95
+ @manager_remote.handle_data_from(self)
96
+
97
+ nil
98
+ end
99
+
100
+ public
101
+ def get_requests
102
+ result = []
103
+
104
+ return result unless @is_online
105
+
106
+ @requests_locker.synchronize do
107
+ begin
108
+
109
+ unless @data_buffer.empty?
110
+ deserialize_data = AMF::Root.deserialize(@data_buffer)
111
+ result = deserialize_data[:objects]
112
+ @data_buffer = deserialize_data[:incomplete_objects] || ''
113
+ end
114
+
115
+ rescue Exception => e
116
+ on_get_requests_error(e)
117
+ end #begin/rescue
118
+ end #synchronize
119
+
120
+ result
121
+ end
122
+
123
+
124
+ public
125
+ def send_response(response_obj)
126
+ return unless @is_online
127
+
128
+ report_about_sent_request(response_obj)
129
+
130
+ response = AMF::Root.serialize(response_obj)
131
+
132
+ send_data(response)
133
+
134
+ nil #for prevent return other value
135
+ end
136
+
137
+ if Rails.env.development?
138
+ protected
139
+ def report_about_sent_request(value)
140
+ value.report_log("sent\t\t") if value.respond_to?(:report_log)
141
+
142
+ nil
143
+ end
144
+ else
145
+ protected
146
+ def report_about_sent_request(value)
147
+ #do nothing
148
+ end
149
+ end
150
+
151
+
152
+ public
153
+ def send_raw_data(raw_data)
154
+ send_data(raw_data)
155
+ end
156
+
157
+ public
158
+ def send_response_ok(request_id)
159
+ response = Api::ResponseOk.new(request_id)
160
+
161
+ send_response(response)
162
+ end
163
+
164
+ public
165
+ def send_response_error(request_id, description = nil)
166
+ response = Api::ResponseError.new(request_id)
167
+ response.description = description
168
+
169
+ send_response(response)
170
+ end
171
+
172
+ public
173
+ def unbind
174
+ @is_online = false
175
+
176
+ @manager_remote.on_client_disconnected(self) if @should_disconnect_session
177
+
178
+ nil
179
+ end
180
+
181
+ end
@@ -0,0 +1,33 @@
1
+ class SocketClientCrossdomain < EM::Connection
2
+
3
+ #
4
+ # Properties
5
+ #
6
+
7
+ public
8
+ def self.manager_remote=(value)
9
+ @manager_remote = value
10
+ end
11
+
12
+ public
13
+ def self.manager_remote
14
+ @manager_remote
15
+ end
16
+
17
+ #
18
+ # Methods
19
+ #
20
+
21
+ public
22
+ def post_init
23
+ @manager_remote = self.class.manager_remote
24
+ end
25
+
26
+ public
27
+ def receive_data(data)
28
+ @manager_remote.on_client_request_policy(self)
29
+
30
+ AppInfo.instance.logger.info 'use 843 port for crossdomain.xml'
31
+ end
32
+
33
+ end