package com.pblabs.profiler;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoAcceptorConfig;
import org.apache.mina.common.SimpleByteBufferAllocator;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.FillLayout;
import org.slf4j.LoggerFactory;
public class FlashProfiler {
private static final int PORT = 42624;
public static Display display;
private static final org.slf4j.Logger log = LoggerFactory.getLogger(FlashProfiler.class);
/**
*
* On OS X, run with VM arg -XstartOnFirstThread
* @param args
*/
public static void main(String[] args) {
Display.setAppName("Flash Profiler");
display = new Display();
Shell shell = new Shell(display);
shell.setText("PBLabs Flash Profiler");
shell.setLayout(new FillLayout());
// Show the log area.
final Text consoleLog = new Text(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
Logger.getLogger("").addHandler(new Handler()
{
public Text consoleOut = consoleLog;
public SimpleFormatter sf = new SimpleFormatter();
public boolean isLoggable(LogRecord lr)
{
return true;
}
public void publish(LogRecord lr)
{
final String msg = lr.getLoggerName() + sf.format(lr);
final Text consoleOut2 = consoleOut;
display.asyncExec(new Runnable()
{
public void run()
{
consoleOut2.append(msg);
}
});
}
public void close()
{
consoleOut.append("Done.\n");
}
public void flush()
{
}
});
log.info("PBLabs Profiler v1.00");
// Kick up the profiler server.
try
{
initNetPort();
}
catch(IOException ioe)
{
log.info("Failed to open port" + PORT + " for profiler connections.");
}
// Run main loop.
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose ();
}
public static void initNetPort() throws IOException
{
ByteBuffer.setUseDirectBuffers(false);
ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
IoAcceptor acceptor = new SocketAcceptor();
IoAcceptorConfig config = new SocketAcceptorConfig();
acceptor.bind( new InetSocketAddress(PORT), new ProfilerServerHandler(), config);
log.info("PBLabs Profiler server started on localhost:" + PORT);
}
}