diff --git a/src/lib/bind-cfgd/python/bind-cfgd.py b/src/lib/bind-cfgd/python/bind-cfgd.py index 1e5751b695..2a3607565a 100644 --- a/src/lib/bind-cfgd/python/bind-cfgd.py +++ b/src/lib/bind-cfgd/python/bind-cfgd.py @@ -17,7 +17,17 @@ class ConfigManager: self.config = ConfigData() def notify_boss(self): - self.cc.group_sendmsg({"Running": "ConfigManager"}, "Boss") + self.cc.group_sendmsg({"running": "configmanager"}, "Boss") + + def add_zone(self, zone_name): + self.config.add_zone(zone_name, "todo") + print "sending update zone add" + self.cc.group_sendmsg({"zone_added": zone_name }, "ParkingLot") + + def remove_zone(self, zone_name): + self.config.remove_zone(zone_name) + print "sending update zone del" + self.cc.group_sendmsg({"zone_deleted": zone_name }, "ParkingLot") def read_config(self, filename): pass @@ -25,11 +35,41 @@ class ConfigManager: def write_config(self, filename): pass + def handle_msg(self, msg): + """return answer message""" + answer = {} + try: + cmd = msg["command"] + if cmd: + if cmd[0] == "zone" and cmd[1] == "add": + self.add_zone(cmd[2]) + answer["result"] = [ 0 ] + elif cmd[0] == "zone" and cmd[1] == "del": + self.remove_zone(cmd[2]) + answer["result"] = [ 0 ] + elif cmd[o] == "zone" and cmd[1] == "list": + answer["result"] = self.zones.keys() + else: + print "unknown command: " + cmd + answer["result"] = [ 1, "Unknown command: " + cmd ] + except KeyError, ke: + print "unknown module: " + str(msg) + answer["result"] = [ 1, "Unknown module: " + str(msg) ] + except IndexError, ie: + print "missing argument" + answer["result"] = [ 1, "Missing argument in command" ] + return answer + def run(self): while (True): - env, msg = self.cc.group_recvmsg(False) - print "message: " + msg, env = self.cc.group_recvmsg(False) + print "received message: " print msg + answer = self.handle_msg(msg); + print "sending answer: " + print answer + self.cc.group_reply(env, answer) + print "answer sent" pass if __name__ == "__main__": diff --git a/src/lib/cc/python/ISC/CC/session.py b/src/lib/cc/python/ISC/CC/session.py index 4e72f4ee8d..09119e7ee4 100644 --- a/src/lib/cc/python/ISC/CC/session.py +++ b/src/lib/cc/python/ISC/CC/session.py @@ -131,11 +131,11 @@ class Session: return seq def group_recvmsg(self, nonblock = True): - msg = self.recvmsg(nonblock) - if msg == None: + env = self.recvmsg(nonblock) + if env == None: return None - data = Message.from_wire(msg["msg"]) - return (data, msg) + msg = Message.from_wire(env["msg"]) + return (msg, env) def group_reply(self, routing, msg): seq = self._next_sequence() diff --git a/src/lib/cc/ruby/lib/cc/session.rb b/src/lib/cc/ruby/lib/cc/session.rb index ca0eadff4c..b5f2942b62 100644 --- a/src/lib/cc/ruby/lib/cc/session.rb +++ b/src/lib/cc/ruby/lib/cc/session.rb @@ -115,14 +115,30 @@ class Session end def group_sendmsg(msg, group, instance = "*", to = "*") + seq = next_sequence sendmsg({ :type => "send", :from => @lname, :to => to, :group => group, :instance => instance, - :seq => next_sequence, + :seq => seq, :msg => CC::Message.to_wire(msg), }) + seq + end + + def group_sendmsg(routing, msg) + seq = next_sequence + sendmsg({ :type => "send", + :from => @lname, + :to => routing["from"], + :group => routing["group"], + :instance => routing["instance"], + :seq => seq, + :reply => fouring["seq"], + :msg => CC::Message.to_wire(msg), + }) + seq end def group_recvmsg(nonblock = true)