/*******************************************************************************
* Copyright (c) 2007, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.internal.core;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.IToken;
/**
* Implementation of the {@code IToken} interface. Used to match commands to results and to cancel pending commands
*/
public class Token implements IToken {
/**
* Internal static variable used to update the Token ID for the given command
*/
private static int cnt = 0;
/**
* Token ID. This is what is seen when we
*/
private final String id;
/**
* Byte representation of the Token ID
*/
private final byte[] bytes;
/**
* ICommandListener associated with this token
*/
private final IChannel.ICommandListener listener;
public Token() {
id = null;
bytes = null;
listener = null;
}
/**
* Constructs a token with the given ICommandListener.
* Used when sending a command/result to the channel
* @param listener ICommandListener
*/
public Token(IChannel.ICommandListener listener) {
this.listener = listener;
id = Integer.toString(cnt++);
int l = id.length();
bytes = new byte[l];
for (int i = 0; i < l; i++) bytes[i] = (byte)id.charAt(i);
}
/**
* Constructs a token from an array of bytes.
* Used when receiving a command/result from the channel
* @param bytes
*/
public Token(byte[] bytes) {
this.bytes = bytes;
listener = null;
int l = bytes.length;
char[] bf = new char[l];
for (int i = 0; i < l; i++) bf[i] = (char)(bytes[i] & 0xff);
id = new String(bf);
}
public boolean cancel() {
return false;
}
public String getID() {
return id;
}
public byte[] getBytes() {
return bytes;
}
public IChannel.ICommandListener getListener() {
return listener;
}
@Override
public String toString() {
return id;
}
}