Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.
  */
 package org.apache.tomcat.bayeux;
 
 import java.util.List;
 import java.util.Map;
 
 
 public class ClientImpl implements Client {
     
     public static final int SUPPORT_CALLBACK_POLL = 0x1;
     public static final int SUPPORT_LONG_POLL = 0x2; 
 
     public static final String COMET_EVENT_ATTR = "org.apache.cometd.bayeux.client";
     
     protected static LinkedList<MessageEMPTY_LIST = new LinkedList<Message>();
    
queued message for remote clients.
 
     protected LinkedList<Messagemessages = null;
    
    
Currently associated event.
 
     protected HttpEvent event;
    
    
Unique id representing this client
 
     protected String id;
    
    
supported connection types, defaults to long-polling
 
     protected int supportedConnTypes =  | ;
    
    
The desired connection type
 
     protected int desirectConnType = ;
    
    
Does this client use json-comment-filtered messages
 
     protected boolean useJsonFiltered = false;
    
    
Same JVM clients, get local=true
 
     protected boolean local;
    
    
The callback object for local clients
 
     protected Listener listener;
     
     protected AtomicInteger nrofsubscriptions = new AtomicInteger(0);
     
     protected ClientImpl(String idboolean local) {
         this. = id;
         this. = local;
         if (!local = new LinkedList<Message>();
     }
     
 /*    protected ClientImpl(String id, HttpEvent event) {
         this(id,false);
         addCometEvent(event);
     }*/
 
     public void deliver(Message message) {
         deliverInternal(null,new MessageImpl[] {(MessageImpl)message});
    }
    
    public void deliver(Message[] message) {
        deliverInternal(null,message);
    }
    protected void deliverInternal(ChannelImpl channelMessageImpl message) {
        deliverInternal(channel,new MessageImpl[] {message});
    }
    protected synchronized void deliverInternal(ChannelImpl channelMessage[] msgs) {
        if (isLocal()) {
            //local clients must have a listener
            ArrayList<Messagelist = new ArrayList<Message>();
            for (int i=0; msgs!=null && i<msgs.lengthi++) {
                //dont deliver to ourselves
                if (this!=msgs[i].getClient()) list.add(msgs[i]);
            }
            if (getListener() != null && list.size()>0) {
                getListener().deliver(list.toArray(new Message[0]));
            }
        } else {
            for (int i=0; msgs!=null && i<msgs.lengthi++) {
                MessageImpl message = (MessageImpl)msgs[i];
                if (this==message.getClient()) { 
                    //dont deliver to ourself
                    continue;
                }
                //we are not implementing forever responses, if the client is connected
                //then we will fire off the message
                //first we check to see if we have any existing connections we can piggy back on
                boolean delivered = false;
                if (!=null) {
                    RequestBase rq = (RequestBase).getHttpServletRequest().getAttribute(.);
                    if (rq!=null) {
                        Map map = new HashMap();
                        try {
                            map.put(.,message.getChannel().getId());
                            map.put(.,message);
                            JSONObject json = new JSONObject(map);
                            if (..isTraceEnabled()) {
                                ..trace("Message instantly delivered to remote client["+this+"] message:"+json);
                            }
                            rq.addToDeliveryQueue(thisjson);
                            //deliver the batch
                            if (i==(msgs.length-1)) {
                                rq.deliver(this);
                                .close(); //todo, figure out a better way, this means only one message gets delivered
                                removeCometEvent(); //and delivered instantly
                            }
                            delivered = true;
                        } catch (Exception e) {
                            // TODO: fix
                            ..errorDeliveringBayeux(e);
                        }
                    }
                }
                if (!delivered) {
                    if (..isTraceEnabled()) {
                        ..trace("Message added to queue for remote client["+this+"] message:"+message);
                    }
                    //queue the message for the next round
                    .add(message);
                }
            }
        }
    }
    public String getId() {
        return this.;
    }
    protected Listener getListener() {
        return ;
    }
    public boolean hasMessages() {
        if (isLocal()) return false;
        else {
            return .size() > 0;
        }
    }
    public boolean isLocal() {
        return ;
    }
    public int getSupportedConnTypes() {
        return ;
    }
    public int getDesirectConnType() {
        return ;
    }
    public boolean useJsonFiltered() {
        return ;
    }
    public void setListener(Listener listener) {
        this. = listener;
    }
    public void setSupportedConnTypes(int supportedConnTypes) {
        this. = supportedConnTypes;
    }
    public void setUseJsonFiltered(boolean useJsonFiltered) {
        this. = useJsonFiltered;
    }
    public void setDesirectConnType(int desirectConnType) {
        this. = desirectConnType;
    }
    public boolean supportsCallbackPoll() {
    }
    public boolean supportsLongPoll() {
        return ( & ) == ;
    }
    public synchronized List<MessagetakeMessages() {
        if (isLocal()) return null;
        if (.size()==0) return ;
        List result = new LinkedList();
        .clear();
        return result;
    }
    
    public String toString() {
        StringBuilder buf = new StringBuilder(super.toString());
        buf.append(" id=").append(getId());
        return buf.toString();
    }
    
    public boolean isSubscribed() {
        return .get()>0;
    }
    
    protected void addCometEvent(HttpEvent event) {
        if (this. != null) {
            try {
                this..close();
            } catch (IOException e) {
                // Nothing
            }
        }
        this. = event;
    }
    
    protected void removeCometEvent(HttpEvent event) {
        if (this. != null && this. == event) {
            this. = null;
        }
    }
    
    protected void subscribed(ChannelImpl ch) {
        .addAndGet(1);
    }
    
    protected void unsubscribed(ChannelImpl ch) {
        .addAndGet(-1);
    }
    
    public void startBatch(){
        //noop until improved
    }
    public void endBatch() {
        //noop until improved
    }
        
New to GrepCode? Check out our FAQ X