All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.termd.core.tty.TtyEventDecoder Maven / Gradle / Ivy

Go to download

An open source terminal daemon library providing terminal handling in Java, back ported to Alibaba by core engine team to support running on JDK 6+.

There is a newer version: 1.1.7.14
Show newest version
/*
 * Copyright 2015 Julien Viet
 *
 * Licensed 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 io.termd.core.tty;


import io.termd.core.function.BiConsumer;
import io.termd.core.function.Consumer;

/**
 * @author Julien Viet
 */
public class TtyEventDecoder implements Consumer {

  private Consumer readHandler;
  private BiConsumer eventHandler;
  private final int vintr;
  private final int veof;
  private final int vsusp;

  public TtyEventDecoder(int vintr, int vsusp, int veof) {
    this.vintr = vintr;
    this.vsusp = vsusp;
    this.veof = veof;
  }

  public Consumer getReadHandler() {
    return readHandler;
  }

  public TtyEventDecoder setReadHandler(Consumer readHandler) {
    this.readHandler = readHandler;
    return this;
  }

  public BiConsumer getEventHandler() {
    return eventHandler;
  }

  public TtyEventDecoder setEventHandler(BiConsumer eventHandler) {
    this.eventHandler = eventHandler;
    return this;
  }

  @Override
  public void accept(int[] data) {
    if (eventHandler != null) {
      int index = 0;
      while (index < data.length) {
        int val = data[index];
        TtyEvent event = null;
        if (val == vintr) {
          event = TtyEvent.INTR;
        } else if (val == vsusp) {
          event = TtyEvent.SUSP;
        } else if (val == veof) {
          event = TtyEvent.EOF;
        }
        if (event != null) {
          if (eventHandler != null) {
            if (readHandler != null) {
              int[] a = new int[index];
              if (index > 0) {
                System.arraycopy(data, 0, a, 0, index);
                readHandler.accept(a);
              }
            }
            eventHandler.accept(event, val);
            int[] a = new int[data.length - index - 1];
            System.arraycopy(data, index + 1, a, 0, a.length);
            data = a;
            index = 0;
            continue;
          }
        }
        index++;
      }
    }
    if (readHandler != null && data.length > 0) {
      readHandler.accept(data);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy