View Javadoc

    1   /*
    2    * Copyright 2012 The Netty Project
    3    *
    4    * The Netty Project licenses this file to you under the Apache License,
    5    * version 2.0 (the "License"); you may not use this file except in compliance
    6    * with the License. You may obtain a copy of the License at:
    7    *
    8    *   http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    13   * License for the specific language governing permissions and limitations
    14   * under the License.
    15   */
    16  package org.jboss.netty.channel.socket;
    17
    18  import org.jboss.netty.channel.Channel;
    19  import org.jboss.netty.channel.DefaultChannelFuture;
    20
    21  public class ChannelRunnableWrapper extends DefaultChannelFuture implements Runnable {
    22
    23      private final Runnable task;
    24      private boolean started;
    25
    26      public ChannelRunnableWrapper(Channel channel, Runnable task) {
    27          super(channel, true);
    28          this.task = task;
    29      }
    30
    31
    32      public void run() {
    33          synchronized (this) {
    34              if (!isCancelled()) {
    35                  started = true;
    36              } else {
    37                  return;
    38              }
    39          }
    40          try {
    41              task.run();
    42              setSuccess();
    43          } catch (Throwable t) {
    44              setFailure(t);
    45          }
    46      }
    47
    48      @Override
    49      public synchronized boolean cancel() {
    50          if (started) {
    51              return false;
    52          }
    53          return super.cancel();
    54      }
    55
    56
    57
    58  }