* adding partially implemented json support to gateway to resume work on other comp (yes, master branch abuse)
This commit is contained in:
parent
b65ccd6060
commit
5b44da8ef2
|
|
@ -3,11 +3,11 @@ require "jam_ruby"
|
|||
require "jam_websockets/version"
|
||||
require "jam_websockets/session_error"
|
||||
require "jam_websockets/client_context"
|
||||
require "jam_websockets/message"
|
||||
require "jam_websockets/router"
|
||||
require "jam_websockets/server"
|
||||
|
||||
include JamRuby
|
||||
|
||||
module JamWebsockets
|
||||
# Your code goes here...
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
require 'json'
|
||||
require 'protocol_buffers'
|
||||
require 'protocol_buffers/compiler'
|
||||
|
||||
class ProtocolBuffers::Message
|
||||
|
||||
def to_json(*args)
|
||||
hash = {'json_class' => self.class.name}
|
||||
|
||||
# simpler version, includes all fields in the output, using the default
|
||||
# values if unset. also includes empty repeated fields as empty arrays.
|
||||
# fields.each do |tag, field|
|
||||
# hash[field.name] = value_for_tag(field.tag)
|
||||
# end
|
||||
|
||||
# prettier output, only includes non-empty repeated fields and set fields
|
||||
fields.each do |tag, field|
|
||||
if field.repeated?
|
||||
value = value_for_tag(field.tag)
|
||||
hash[field.name] = value unless value.empty?
|
||||
else
|
||||
hash[field.name] = value_for_tag(field.tag) if value_for_tag?(field.tag)
|
||||
end
|
||||
end
|
||||
hash.to_json(*args)
|
||||
end
|
||||
|
||||
def self.json_create(hash)
|
||||
hash.delete('json_class')
|
||||
|
||||
# initialize takes a hash of { attribute_name => value } so you can just
|
||||
# pass the hash into the constructor. but we're supposed to be showing off
|
||||
# reflection, here. plus, that raises an exception if there is an unknown
|
||||
# key in the hash.
|
||||
# new(hash)
|
||||
|
||||
message = new
|
||||
fields.each do |tag, field|
|
||||
if value = hash[field.name.to_s]
|
||||
message.set_value_for_tag(field.tag, value)
|
||||
end
|
||||
end
|
||||
message
|
||||
end
|
||||
end
|
||||
|
|
@ -2,6 +2,7 @@ require 'pry'
|
|||
require 'set'
|
||||
require 'hot_bunnies'
|
||||
require 'thread'
|
||||
require 'json'
|
||||
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
|
|
@ -227,8 +228,14 @@ module JamWebsockets
|
|||
@pending_clients.add(client)
|
||||
end
|
||||
|
||||
is_json = false
|
||||
|
||||
client.onopen {
|
||||
#binding.pry
|
||||
@log.debug "client connected #{client}"
|
||||
|
||||
p client.request["query"]
|
||||
is_json = !!client.request["query"]["json"]
|
||||
}
|
||||
|
||||
client.onclose {
|
||||
|
|
@ -254,9 +261,18 @@ module JamWebsockets
|
|||
# TODO: set a max message size before we put it through PB?
|
||||
# TODO: rate limit?
|
||||
|
||||
|
||||
begin
|
||||
pb_msg = Jampb::ClientMessage.parse(msg.to_s)
|
||||
self.route(pb_msg, client)
|
||||
if is_json
|
||||
#{"type":100, "target":"server", "Login" : {"username":"hi"}}
|
||||
parse = JSON.parse(msg)
|
||||
p parse
|
||||
pb_msg = Jampb::ClientMessage.json_create(parse)
|
||||
p pb_msg
|
||||
else
|
||||
pb_msg = Jampb::ClientMessage.parse(msg.to_s)
|
||||
self.route(pb_msg, client)
|
||||
end
|
||||
rescue SessionError => e
|
||||
@log.info "ending client session deliberately due to malformed client behavior. reason=#{e}"
|
||||
begin
|
||||
|
|
|
|||
Loading…
Reference in New Issue