/** * * 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. */ /* Version 0.1 : R Jewson (rjewson at gmail dot com). First release, only for reciept of messages. Version 0.2 : no update Version 0.3s : Sheer added per-subscription text and binary message distribution Version 0.4s : Sheer added message bytetypes */ package com.sheer.stomp { import flash.events.Event; import flash.events.DataEvent; import flash.events.IOErrorEvent ; import flash.events.EventDispatcher; import flash.events.TimerEvent; import flash.events.ProgressEvent; import flash.utils.ByteArray; import com.sheer.stomp.STOMPEvent; public class STOMPSubscription extends EventDispatcher { public var destinationName:String; public var ackMode:String; public var selector:String; public var _subscribed:Boolean=false; public var _suspended:Boolean=false; public var stompClient:STOMPClient=null; public var MsgFifo:Array = new Array(); public var TxtFifo:Array = new Array(); public function STOMPSubscription( _destinationName:String , _ackMode:String = "auto" , _selector:String = null ) { destinationName = _destinationName; ackMode = _ackMode; selector = _selector; } public function getSubCommand():String { //return "SUBSCRIBE\ndestination: "+destinationName+"\nack: "+ackMode+"\n\n\u0000"; return "SUBSCRIBE\ndestination: "+destinationName+ "\nactivemq.noLocal: true\n\n\u0000"; } public function getUnsubCommand():String { return "UNSUBSCRIBE\ndestination: "+destinationName +"\n\n\u0000"; } public function incomingBytes(p:STOMPMsg):Boolean { if(_suspended) { MsgFifo[MsgFifo.length] = p; return true; } else return dispatchBytes(p); } public function incomingObj(p:STOMPMsg):Boolean { // if we are queueing, stick on FIFO // otherwise, send if(_suspended) { MsgFifo[MsgFifo.length] = p; return true; } else return dispatchObj(p); } public function incomingText(p:STOMPMsg):Boolean { // if we are queueing, stick on FIFO // otherwise, send if(_suspended) { TxtFifo[TxtFifo.length] = p; return true; } else return dispatchText(p); } public function dispatchText(p:STOMPMsg):Boolean { // post a event dispatchEvent(new STOMPEvent(STOMPEvent.TextMessageEvent,p)); return true; } public function dispatchObj(p:STOMPMsg):Boolean { // post a event dispatchEvent(new STOMPEvent(STOMPEvent.ObjectMessageEvent,p)); return true; } public function dispatchBytes(p:STOMPMsg):Boolean { dispatchEvent(new STOMPEvent(STOMPEvent.BytesMessageEvent,p)); return true; } public function flush():void { stompClient.flush(); } private function emptyFifos():void { var i:Number; for(i=0;i