Sorry, I really wasn’t trying to offend, I just came in to offer an alternative and respond with some constructive criticism. I’m happy to explain:
Your SimpleChatClient for example, I kind of ripped some code but I think I’ve got the basic gist of it here:
NetStation mStation = new NetStation();
BusLine mLine = mStation.createLine(address, port);
ChatClient mChat = new ChatClient(mStation, chatId);
mChat.addListener(new ChatListener() {
public void newMessage(ChatMessage msg) {
System.out.println(msg.getSenderName() + ": " + msg.getMessage());
mChat.clear();
}
});
mChat.send(mChatName, "Hello Chat!");
mStation.flush();
That to me seems a few too many things to keep track of. Further, the ChatClient is part of the project itself, so assuming this was a custom implementation where they were creating this from scratch it would also need something similar to the ChatClient implementation I’m assuming:
public class ChatClient
{
private final BusStation mStation;
private final Identity mProtocolID;
private final ChatReceiver mReceiver = new ChatReceiver( this );
private final ArrayList mListeners = new ArrayList();
private final BusTicket mTicket;
/**
* Creates a new instance of Chat.
*/
public ChatClient( BusStation station, Identity protocolID )
{
mStation = station;
mProtocolID = protocolID;
mTicket = new BusTicket( mProtocolID );
mStation.add( mProtocolID, mReceiver );
}
/**
* Shutdown the chat.
*/
public void close()
{
mStation.remove( mProtocolID, mReceiver );
}
/**
* Get this list of messages that came in after latest <code>clear()</code>.
*/
public Iterator getIncoming()
{
return mReceiver.getIncoming();
}
/**
* Release list of incoming messages.
*/
public void clear()
{
mReceiver.clear();
}
/**
* Get number of incoming messages.
*/
int getMessageCount()
{
return mReceiver.getMessageCount();
}
/**
* Retrieve a certain message.
*/
ChatMessage getMessage( int idx )
{
return mReceiver.getMessage( idx );
}
/**
* Send message anonymously.
*/
public void send( String text )
{
BusTicket ticket = createTicket( ChatConstants.SENDER_IS_ANONYMOUS );
ticket.putString( text );
sendTicket( ticket );
}
/**
* Send message giving the name of the sender.
*/
public void send( String sender, String text )
{
BusTicket ticket = createTicket( ChatConstants.SENDER_IS_NAME );
ticket.putString( sender );
ticket.putString( text );
sendTicket( ticket );
}
/**
* Send message giving the <code>Identity</code> of the sender.
*/
public void send( Identity sender, String text )
{
BusTicket ticket = createTicket( ChatConstants.SENDER_IS_ID );
ticket.putID( sender );
ticket.putString( text );
sendTicket( ticket );
}
private final BusTicket createTicket( byte sendertype )
{
mTicket.clear();
mTicket.putByte( sendertype );
return mTicket;
}
private final void sendTicket( BusTicket ticket )
{
mStation.broadcast( ticket, null );
}
// ---------------------------------------------------------------------------------------------
//
// Listener handling
//
// ---------------------------------------------------------------------------------------------
public void addListener( ChatListener l )
{
mListeners.add( l );
}
public void removeListener( ChatListener l )
{
mListeners.remove( l );
}
void notifyNewMessage( ChatMessage msg )
{
int cnt = mListeners.size();
for ( int i = cnt-1; i >= 0; i-- )
{
((ChatListener)mListeners.get( i )).newMessage( msg );
}
}
}
Looks like complication to me. :-p
Here’s an example using JGN for the client aspect assuming there is a server to respond (I make the same assumption for yours):
NetworkingClient client = new NetworkingClient();
if (client.connectAndWait(address, port)) {
Thread t = new Thread(client); // This is simply for convenience, in most cases you would call client.update() in your update method instead - it handles sending Noop to the server to let it know its still connected
t.start();
client.addMessageListener(new MessageListener()) {
public void messageReceived(Message message) {}
public void messageReceived(ChatMessage message) {
System.out.println(message.getSenderName() + ": " + message.getText());
}
});
// Send a message
ChatMessage message = new ChatMessage();
message.setSenderName("Me");
message.setText("Hello Chat!");
client.sendToServer(message);
}
EDIT: Oops, forgot to include the best part, the ChatMessage:
public class ChatMessage extends CertifiedMessage {
private String senderName;
private String text;
public void setSenderName(String senderName) {
this.senderName = senderName;
}
public String getSenderName() {
return senderName;
}
public void setText(String text) {
this.text = text;
}
public String getText() {
return text;
}
}
Cuts down on the learning curve when it’s straight-up beans you have to create. 
-Matt Hicks