Skip to content

Commit

Permalink
Updated RespondTo policy object
Browse files Browse the repository at this point in the history
  • Loading branch information
Fernando Alonso committed Feb 15, 2013
1 parent 5d9cd1b commit 7c28e12
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 16 deletions.
22 changes: 17 additions & 5 deletions lib/protocol/policies/respond_to.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ def valid_zones_string
valid_string_for(@valid_zones)
end

def is_instance_specific?
[@valid_instances[:check_level] == LVL_SPECIFIC, @valid_instances[:specific]]
end

def is_class_specific?
[@valid_classes[:check_level] == LVL_SPECIFIC, @valid_classes[:specific]]
end

def is_zone_specific?
[@valid_zones[:check_level] == LVL_SPECIFIC, @valid_zones[:specific]]
end

private
def valid_string_for(hash)
result = Cucub::Protocol::Policies::RespondTo.check_level_string(hash[:check_level])
Expand Down Expand Up @@ -55,9 +67,9 @@ def self.parse_match_to_pair(symbol, word)
symbol = nil if symbol.eql?("")
case symbol
when "*"
return Cucub::Protocol::Policies::RespondTo::LVL_ANY
return LVL_ANY
when "~"
return Cucub::Protocol::Policies::RespondTo::LVL_SAME
return LVL_SAME
when nil
return [LVL_SPECIFIC, word]
end
Expand All @@ -69,9 +81,9 @@ def self.parse(text_config)

matches = text_config.match(regexp)

instance_pair = Cucub::Protocol::Policies::RespondTo.parse_match_to_pair(matches[5] || matches[3], matches[4])
class_pair = Cucub::Protocol::Policies::RespondTo.parse_match_to_pair(matches[10] || matches[8], matches[9])
zone_pair = Cucub::Protocol::Policies::RespondTo.parse_match_to_pair(matches[15] || matches[13], matches[14])
instance_pair = parse_match_to_pair(matches[5] || matches[3], matches[4])
class_pair = parse_match_to_pair(matches[10] || matches[8], matches[9])
zone_pair = parse_match_to_pair(matches[15] || matches[13], matches[14])

Cucub::Protocol::Policies::RespondTo.new(instance_pair, class_pair, zone_pair)
end
Expand Down
11 changes: 1 addition & 10 deletions lib/protocol/specification.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,7 @@ def uses_board=(uses_board)
end

def respond_to=(respond_to)
case respond_to
when nil
@respond_to = nil
when "class", "object", "class+object"
values = respond_to.split("+")
@respond_to = values
else
@respond_to = respond_to
# raise "invalid respond_to value!: #{respond_to}"
end
@respond_to = Cucub::Protocol::Policies::RespondTo.parse(respond_to)
end

def serialize=(serialization)
Expand Down
94 changes: 93 additions & 1 deletion protocol.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
To Write Classes: Reference, Protocol, Message, Namespace-CP-Zone
To Write Classes: Protocol, Namespace-CP-Zone


Protocol:
Expand Down Expand Up @@ -56,3 +56,95 @@ An available Router in the CP handles this messages and tries to forward it to t
neighbourhood = the namespace where the Object which takes the message should exist.
CP = ID for a namespace.
reference = CP+Class+Object, or Class+Object, or Class


man respond_to (https://gist.github.com/krakatoa/eb9d9f3f2472b35b1e9a):
===============

respond_to = [object_id defaults *]>class defaults ~>[cp defaults ~]

~instance means: response uses the same destination as the message respond_to object_uuid (alias ~)
~class means: response uses the same class destination as the message respond_to object_uuid (alias ~)
* means: any. It could be any instance, or any CP. It does not apply to classes.

valid masks:
-----------

respond_to = ~instance
respond_to = * > ~class
respond_to = > core >

Nota: Se rechaza el mensaje siempre que se especifique un object_uuid sin clase.
----

A1)
Restringir que la instancia a la que se responde sea la misma que la referencia de origen.
------------------------------------------------------------------------------------------
respond_to = ~instance
respond_to = ~

-> Todos los mensajes que no especifiquen el object_uuid para respuesta, tendran el uuid igual al uuid de origen del mensaje.
-> Todos los mensajes que especifiquen un object_uuid distinto al uuid de origen, seran rechazados.
-> Todos los mensajes que no especifiquen la clase para respuesta, tendran la clase de origen del mensaje.
-> Todos los mensajes que especifiquen una clase distinta, seran rechazados.

#A2) postergar seteo de uuids arbitrarios en Protocol.ini
#Restringir que la instancia a la que se responde sea arbitrariamente elegida. Es obligatorio setear la clase a la que pertenece.
#respond_to = ID18 > engine
#-> Todos los mensajes que no especifiquen el object_uuid para respuesta, tendran este valor de uuid.
#-> Todos los mensajes que especifiquen un object_uuid distinto, seran rechazados.
#-> Todos los mensajes que no especifiquen la clase para respuesta, tendran este valor de clase.
#-> Todos los mensajes que especifiquen una clase distinta, seran rechazados.


A3)
Permitir que la instancia a la que se responde sea cualquiera.
------------------------------------------------------------------------------------------
respond_to = *

-> Todos los mensajes que no especifiquen el object_uuid para respuesta, no tendran un uuid especifico.
-> Todos los mensajes que especifiquen un object_uuid, tendran ese valor.
-> Todos los mensajes que no especifiquen la clase para respuesta, tendran la clase de origen del mensaje.
-> Todos los mensajes que especifiquen una clase distinta, seran rechazados.


B1)
Restringir que la clase a la que se responde sea la misma que la referencia de origen.
------------------------------------------------------------------------------------------

respond_to = > ~class
respond_to = * > ~class

(igual a A3)


B2)
Restringir que la clase y object_uuid a la que se responde sea la misma que la referencia de origen.
------------------------------------------------------------------------------------------
respond_to = ~instance > ~class

(igual a A1)


B3)
Restringir que la clase a la que se responde sea arbitrariamente elegida.
------------------------------------------------------------------------------------------
respond_to = > engine
respond_to = * > engine

-> Todos los mensajes que no especifiquen el object_uuid para respuesta, no tendran un uuid especifico.
-> Todos los mensajes que especifiquen un object_uuid, tendran ese valor.
-> Todos los mensajes que no especifiquen la clase para respuesta, tendran esta clase.
-> Todos los mensajes que especifiquen una clase distinta, seran rechazados.


B4)
Permitir que la clase a la que se responde sea cualquiera.
------------------------------------------------------------------------------------------
respond_to = > *
respond_to = * > *

-> Todos los mensajes que no especifiquen el object_uuid para respuesta, no tendran un uuid especifico.
-> Todos los mensajes que especifiquen un object_uuid, tendran ese valor.
-> Todos los mensajes que no especifiquen la clase para respuesta, tendran la clase de origen del mensaje.
-> Todos los mensajes que especifiquen una clase distinta, tendran esa clase.

0 comments on commit 7c28e12

Please sign in to comment.