Better support of array type in RPC.

This commit is contained in:
Cheng Zhao 2013-04-25 16:03:29 +08:00
parent ab4015ef51
commit 678a4953fa
2 changed files with 45 additions and 42 deletions

View file

@ -8,14 +8,17 @@ class PlainObject
constructor: (value) -> constructor: (value) ->
@type = typeof value @type = typeof value
@type = 'value' if value is null @type = 'value' if value is null
@type = 'array' if Array.isArray value
if @type is 'object' or @type is 'function' if @type is 'array'
@members = []
@members.push new PlainObject(el) for el in value
else if @type is 'object' or @type is 'function'
@name = value.constructor.name @name = value.constructor.name
@id = objectsRegistry.add value @id = objectsRegistry.add value
@members = [] @members = []
for prop, field of value @members.push { name: prop, type: typeof field } for prop, field of value
@members.push { name: prop, type: typeof field }
else else
@type = 'value' @type = 'value'
@value = value @value = value

View file

@ -1,11 +1,11 @@
ipc = require 'ipc' ipc = require 'ipc'
generateFromPainObject = (plain) -> generateFromPainObject = (plain) ->
if plain.type is 'value' switch plain.type
return plain.value when 'error' then throw new Error('Remote Error: ' + plain.value)
else if plain.type is 'error' when 'value' then plain.value
throw new Error('Remote Error: ' + plain.value) when 'array' then (generateFromPainObject(el) for el in plain.members)
else
ret = {} ret = {}
if plain.type is 'function' if plain.type is 'function'
# A shadow class to represent the remote function object. # A shadow class to represent the remote function object.