/*
* This file is part of Spoutcraft.
*
* Copyright (c) 2011 SpoutcraftDev <http://spoutcraft.org/>
* Spoutcraft is licensed under the GNU Lesser General Public License.
*
* Spoutcraft is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Spoutcraft is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.spoutcraft.client;
import org.spoutcraft.api.gui.Screen;
import org.spoutcraft.api.gui.TextField;
import org.spoutcraft.client.packet.PacketControlAction;
public class ScheduledTextFieldUpdate implements Runnable {
private static final long DELAY_TIME = 500;
private static final long SLEEP_TIME = 125;
private TextField textField;
private Screen screen;
private long sendTime;
private Thread thread;
public ScheduledTextFieldUpdate(Screen screen, TextField textField) {
this.textField = textField;
this.screen = screen;
}
public void run() {
delay();
while (!expired()) {
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
break;
}
}
textField.onTypingFinished();
SpoutClient.getInstance().getPacketManager().sendSpoutPacket(new PacketControlAction(screen, textField, textField.getText(), textField.getCursorPosition()));
}
public synchronized void delay() {
sendTime = System.currentTimeMillis() + DELAY_TIME;
}
public synchronized boolean expired() {
return sendTime <= System.currentTimeMillis();
}
public synchronized void start() {
(thread = new Thread(this)).start();
}
public synchronized boolean isAlive() {
return thread.isAlive();
}
}