Chat Tutorial in NetBeans/Text Client: Difference between revisions

From Arianne
Jump to navigation Jump to search
Content deleted Content added
imported>SimonSmall
Added building the Text Client
imported>SimonSmall
small correction
Line 1: Line 1:
== Introduction ==
== Introduction ==


These instructions are a continuation of the Chat Tutorial. This is a text based
These instructions are a continuation of the Chat Tutorial. This is a text based client that runs in a command / terminal window.
client that runs in a command / terminal window.


== NetBeans Project ==
== NetBeans Project ==


In the NetBeans IDE, click New Project, choose Java and Java Application. Click Next, then give the Project Name as client. Change the Project Location to DEVPATH\DevChat (DEVPATH, see above); the Project Folder is shown as DEVPATH\DevChat\client with DEVPATH being your chosen location. Check that Create Main Class is ticked, and the class is client.Test before clicking Finish.
In the NetBeans IDE, close all open projects. Click New Project, choose Java and Java Application. Click Next, then give the Project Name as client. Change the Project Location to DEVPATH\DevChat (DEVPATH, see above); the Project Folder is shown as DEVPATH\DevChat\client with DEVPATH being your chosen location. Check that Create Main Class is ticked, and the class is client.Test before clicking Finish.


The empty Project is created in NetBeans. Under the Files tab you will see the directory structure it has also generated; check this using your file explorer.
The empty Project is created in NetBeans. Under the Files tab you will see the directory structure it has also generated; check this using your file explorer.
Line 14: Line 13:
=== Client Files ===
=== Client Files ===


The following files need to be created, as they are not present in the marauroa source file. It does not matter in which order you create them.
The following files need to be created, as they are not present in the marauroa source file.


==== Client.java ====
==== Client.java ====


Right-click on the client package and add a new Class. Give the class name as Client. Add the following code:
Right-click on the client package and add a new Java Class. Give the class name as Client. Add the following code:


<source lang="Java">
<source lang="Java">
package client;
package client;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.List;
import java.util.HashMap;
import java.util.ArrayList;
import marauroa.client.ClientFramework;
import marauroa.client.ClientFramework;
import marauroa.client.net.IPerceptionListener;
import marauroa.client.net.IPerceptionListener;
Line 77: Line 75:
}
}
@Override
protected void onPerception(MessageS2CPerception message) {
protected void onPerception(MessageS2CPerception message) {
try {
try {
Line 84: Line 83:
}
}
}
}

@Override
protected List<TransferContent> onTransferREQ(List<TransferContent> items) {
protected List<TransferContent> onTransferREQ(List<TransferContent> items) {
return items;
return items;
}
}

@Override
protected void onTransfer(List<TransferContent> items) {
protected void onTransfer(List<TransferContent> items) {
}
}

@Override
protected void onAvailableCharacters(String[] characters) {
protected void onAvailableCharacters(String[] characters) {
available_characters = characters;
available_characters = characters;
}
}

@Override
protected void onServerInfo(String[] info) {
protected void onServerInfo(String[] info) {
for (String s : info) {
for (String s : info) {
Line 101: Line 104:
}
}
}
}

@Override
protected String getGameName() {
protected String getGameName() {
return "Chat";
return "Chat";
}
}

@Override
protected String getVersionNumber() {
protected String getVersionNumber() {
return "0.5";
return "0.5";
}
}

@Override
protected void onPreviousLogins(List<String> previousLogins) {
protected void onPreviousLogins(List<String> previousLogins) {
}
}

class PerceptionListener implements IPerceptionListener {
class PerceptionListener implements IPerceptionListener {

@Override
public boolean onAdded(RPObject object) {
public boolean onAdded(RPObject object) {
if (object.has("text")) {
if (object.has("text")) {
Line 120: Line 128:
return false;
return false;
}
}

@Override
public boolean onModifiedAdded(RPObject object, RPObject changes) {
public boolean onModifiedAdded(RPObject object, RPObject changes) {
return false;
return false;
}
}

@Override
public boolean onModifiedDeleted(RPObject object, RPObject changes) {
public boolean onModifiedDeleted(RPObject object, RPObject changes) {
return false;
return false;
}
}

@Override
public boolean onDeleted(RPObject object) {
public boolean onDeleted(RPObject object) {
return false;
return false;
}
}

@Override
public boolean onMyRPObject(RPObject added, RPObject deleted) {
public boolean onMyRPObject(RPObject added, RPObject deleted) {
return false;
return false;
}
}

@Override
public void onSynced() {
public void onSynced() {
}
}

@Override
public void onUnsynced() {
public void onUnsynced() {
}
}

@Override
public void onException(Exception e, marauroa.common.net.message.MessageS2CPerception perception) {
public void onException(Exception e, marauroa.common.net.message.MessageS2CPerception perception) {
e.printStackTrace();
e.printStackTrace();
System.exit(-1);
System.exit(-1);
}
}

@Override
public boolean onClear() {
public boolean onClear() {
return false;
return false;
}
}

public void onPerceptionBegin(byte type, int timestamp) {
public void onPerceptionBegin(byte type, int timestamp) {
}
}

public void onPerceptionEnd(byte type, int timestamp) {
public void onPerceptionEnd(byte type, int timestamp) {
}
}

Revision as of 21:22, 15 January 2012

Introduction

These instructions are a continuation of the Chat Tutorial. This is a text based client that runs in a command / terminal window.

NetBeans Project

In the NetBeans IDE, close all open projects. Click New Project, choose Java and Java Application. Click Next, then give the Project Name as client. Change the Project Location to DEVPATH\DevChat (DEVPATH, see above); the Project Folder is shown as DEVPATH\DevChat\client with DEVPATH being your chosen location. Check that Create Main Class is ticked, and the class is client.Test before clicking Finish.

The empty Project is created in NetBeans. Under the Files tab you will see the directory structure it has also generated; check this using your file explorer.

Right click the Libraries branch of the server Project tree, and select Add Project. Make sure you browse to the correct file location and select the marauroa project that you created earlier. This will include your marauroa library that you built.

Client Files

The following files need to be created, as they are not present in the marauroa source file.

Client.java

Right-click on the client package and add a new Java Class. Give the class name as Client. Add the following code:

package client;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import marauroa.client.ClientFramework;
import marauroa.client.net.IPerceptionListener;
import marauroa.client.net.PerceptionHandler;
import marauroa.common.game.RPAction;
import marauroa.common.game.RPObject;
import marauroa.common.net.message.MessageS2CPerception;
import marauroa.common.net.message.TransferContent;
 
public class Client extends ClientFramework {
  private PerceptionHandler handler;
  protected static Client client;
  private Map<RPObject.ID, RPObject> world_objects;
  private String[] available_characters;
  private List<String> quotes = new ArrayList<String>();
 
  public static Client get() {
    if (client == null) {
      client = new Client();
    }
    return client;
  }
 
  protected Client() {
    super("log4j.properties");
    world_objects = new HashMap<RPObject.ID, RPObject>();
    handler = new PerceptionHandler(new PerceptionListener());
  }
 
  public String[] GetAvailableCharacters() {
    return available_characters;
  }
 
  String popQuote() {
    if (quotes.isEmpty()) {
      return null;
    }
    String result = quotes.get(0);
    quotes.remove(0);
    return result;
  }
 
  public void SendMessage(String text) {
    RPAction action;
    action = new RPAction();
    action.put("type", "chat");
    action.put("text", text);
    send(action);
  }
 
  @Override
  protected void onPerception(MessageS2CPerception message) {
    try {
      handler.apply(message, world_objects);
    } catch (java.lang.Exception e) {
      // Something weird happened while applying perception
    }
  }

  @Override
  protected List<TransferContent> onTransferREQ(List<TransferContent> items) {
    return items;
  }

  @Override
  protected void onTransfer(List<TransferContent> items) {
  }

  @Override
  protected void onAvailableCharacters(String[] characters) {
    available_characters = characters;
  }

  @Override
  protected void onServerInfo(String[] info) {
    for (String s : info) {
      quotes.add(s);
    }
  }

  @Override
  protected String getGameName() {
    return "Chat";
  }

  @Override
  protected String getVersionNumber() {
    return "0.5";
  }

  @Override
  protected void onPreviousLogins(List<String> previousLogins) {
  }

  class PerceptionListener implements IPerceptionListener {

    @Override
    public boolean onAdded(RPObject object) {
      if (object.has("text")) {
        quotes.add("*" + object.get("from") + "* : " + object.get("text"));
      }
      return false;
    }

    @Override
    public boolean onModifiedAdded(RPObject object, RPObject changes) {
      return false;
    }

    @Override
    public boolean onModifiedDeleted(RPObject object, RPObject changes) {
      return false;
    }

    @Override
    public boolean onDeleted(RPObject object) {
      return false;
    }

    @Override
    public boolean onMyRPObject(RPObject added, RPObject deleted) {
      return false;
    }

    @Override
    public void onSynced() {
    }

    @Override
    public void onUnsynced() {
    }

    @Override
    public void onException(Exception e, marauroa.common.net.message.MessageS2CPerception perception) {
      e.printStackTrace();
      System.exit(-1);
    }

    @Override
    public boolean onClear() {
      return false;
    }

    public void onPerceptionBegin(byte type, int timestamp) {
    }

    public void onPerceptionEnd(byte type, int timestamp) {
    }
  }
}

Close and Save the file.

Test.java

This file was created when you created the new Project. Add the following (or replace the existing) code:

package client;

import marauroa.common.game.RPObject;

public class Test {
  @SuppressWarnings("SleepWhileInLoop")
  public static void main(String[] args) {
    boolean cond = true;
    Client my = Client.get();
    try {
      my.connect("localhost", 5555);
      if (args.length == 3) {
        my.createAccount(args[0], args[1], args[2]);
      }
      my.login(args[0], args[1]);
      if (my.GetAvailableCharacters().length == 0) {
        RPObject character = new RPObject();
        my.createCharacter(args[0], character);
      }
      my.chooseCharacter(args[0]);
    } catch (Exception e) {
      cond = false;
    }
    int i = 0;
    while (cond) {
      ++i;
      my.loop(0);
      if (i % 100 == 50) {
        my.SendMessage("test" + i);
      }
      String s = my.popQuote();
      while (s != null) {
        System.out.println(s);
        s = my.popQuote();
      }
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        cond = false;
      }
    }
  }
}

Close and Save the file.

Build the Project

If there are no errors in the package, select Run, Clean and Build Project from the NetBeans menu bar. This will create client.jar in the dist directory.

Completion

The files in the dist directory are the ones you will need for your game.