| #!/usr/bin/env python |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| import traceback |
| from fnmatch import fnmatch |
| from qpid.messaging import * |
| |
| class Dispatcher: |
| |
| def unhandled(self, msg): |
| print "UNHANDLED MESSAGE: %s" % msg |
| |
| def ignored(self, msg): |
| return False |
| |
| def dispatch(self, msg): |
| try: |
| if self.ignored(msg): |
| return () |
| else: |
| type = msg.properties.get("type") |
| replies = getattr(self, "do_%s" % type, self.unhandled)(msg) |
| if replies is None: |
| return () |
| else: |
| return replies |
| except: |
| traceback.print_exc() |
| return () |
| |
| def run(self, session): |
| while self.running(): |
| msg = session.next_receiver().fetch() |
| replies = self.dispatch(msg) |
| |
| count = len(replies) |
| sequence = 1 |
| for to, r in replies: |
| r.correlation_id = msg.correlation_id |
| r.properties["count"] = count |
| r.properties["sequence"] = sequence |
| sequence += 1 |
| try: |
| snd = session.sender(to) |
| snd.send(r) |
| except SendError, e: |
| print e |
| finally: |
| snd.close() |
| |
| session.acknowledge(msg) |
| |
| def get_status(msg): |
| return msg.content["identity"], msg.content["status"], msg.content["owner"] |
| |
| FREE = "free" |
| BUSY = "busy" |
| |
| def match(value, patterns): |
| for p in patterns: |
| if fnmatch(value, p): |
| return True |
| return False |