编辑“︁
Marauroa Chat Tutorial/Text Client
”︁
跳转到导航
跳转到搜索
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Navigation for Marauroa Top|Using}} {{Navigation for Marauroa Users}} {{Marauroa Chat Tutorial}} == 编码 == 为了使用Marauroa框架字创建客户端,您应该使用您的逻辑扩展marauroa.client.ClientFramework类。 这是聊天客户端的源代码 <pre> import java.util.Map; import java.util.HashMap; import java.util.List; import java.util.LinkedList; 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; private static Client client; private Map<RPObject.ID, RPObject> worldObjects; private String[] availableCharacters; private LinkedList<String> quotes = new LinkedList<String>(); public static Client get() { if (client == null) { client = new Client(); } return client; } protected Client() { super("log4j.properties"); worldObjects = new HashMap<RPObject.ID, RPObject>(); handler = new PerceptionHandler(new PerceptionListener()); } public String[] getAvailableCharacters() { return availableCharacters; } public String popQuote() { if (quotes.isEmpty()) { return null; } return quotes.pop(); } 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, worldObjects); } 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) { availableCharacters = 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, MessageS2CPerception perception) { e.printStackTrace(); System.exit(-1); } @Override public boolean onClear() { return false; } @Override public void onPerceptionBegin(byte type, int timestamp) { } @Override public void onPerceptionEnd(byte type, int timestamp) { } } } </pre> 这主要是样板代码。 我们声称我们是“聊天”客户端,版本为“ 0.5”。您还记得,我们的服务器将接受任何“聊天”客户端,而没有版本限制。 您应该注意的是,我们使用了Marauroa提供的感知处理程序,请参见onPerception。 我们仍然引入了自己的感知侦听器,以便在添加,修改或删除对象时能够采取措施。 PerceptionListener是我们的实现。 我们仅使用onAdded处理程序,该处理程序允许我们在出现新对象时做出反应,即将新的聊天消息添加到消息列表中。 在其他处理程序中返回的假值非常重要,因为它们向Marauroa表示您要继续当前操作(例如添加对象)。 收到的所有消息都存储在消息列表中。 一个人可以使用popQuote()方法一一访问存储的消息. 最后,您可以使用SendMessage方法发送消息。 它构造服务器可理解的RPAction并将其发送。 Marauroa框架为服务器提供了主要方法,因此您无需关心执行循环。 对于客户端而言并非如此,因此我们还需要实现客户端的主要模块。 这是一个非常简单的解决方案 <pre> import marauroa.common.game.RPObject; public class Test { public static void main(String[] args) { boolean runClient = true; Client client = Client.get(); try { client.connect("localhost", 5555); if (args.length == 3) { client.createAccount(args[0], args[1], args[2]); } client.login(args[0], args[1]); if (client.getAvailableCharacters().length == 0) { RPObject character = new RPObject(); client.createCharacter(args[0], character); } client.chooseCharacter(args[0]); } catch (Exception e) { runClient = false; } int i = 0; while (runClient) { i++; client.loop(0); if (i % 100 == 50) { client.sendMessage("test" + i); } String s = client.popQuote(); while (s != null) { System.out.println(s); s = client.popQuote(); } try { Thread.sleep(100); } catch (InterruptedException e) { runClient = false; } } } } </pre> 我们的main方法做两件事。 首先,如果提供了三个命令行参数(登录,密码,电子邮件),我们将创建一个新帐户。 否则,我们仅使用指定的登录名和密码登录。 然后是时候选择一个角色了。 如果服务器报告该帐户没有可用的角色,那么我们将创建一个新名称,该名称与帐户名称相同。 请注意,不可能直接在Client类的onAvailableCharacters处理程序中选择角色。 随后开始心跳循环。 在每一步中,我们都调用loop(0),其中浮点参数在这一点上没有任何意义。 每100步,我们就会向服务器发送一条消息。 没有互动的方式来控制消息,但是看到您自己的客户端创建的聊天仍然令人赞叹。 == 部署 == 运行客户端非常简单,您只需要一堆jar(客户端不需要数据库)和已编译的客户端代码。 我使用以下行进行编译 <pre> javac -cp marauroa.jar;log4j.jar;. *.java </pre> 确保所需的jar位于当前目录中。 运行使用 <pre> java -cp marauroa.jar;log4j.jar;h2.jar;. Test login password </pre> 同样,在Linux和MacOSX上,所有“;” 必须替换为“:”。 不要忘记用实际的登录名和密码替换。 要创建一个新帐户,只需添加第三个命令行参数(应该是电子邮件,但目前尚无验证)。. == 输出 == 理想情况下,您应该会看到类似 <pre> >java -cp marauroa.jar;log4j.jar;h2.jar;. Test test1 test1 Cannot find log4j.properties in classpath. Using default properties. *test1* : test50 *test1* : test150 *test1* : test250 ... </pre> 请注意有关log4j.properties的消息:您可以创建该文件以便在Marauroa框架内配置Log4J用法. == 下一步 == 在本教程的下一部分中,我们将编写一个 '''[[Marauroa Chat Tutorial/Swing Client|Swing 客户端]]''' 它带有图形用户接口. [[Category:Marauroa]] {{#breadcrumbs: [[Marauroa]] | [[Navigation for Marauroa Users|使用]] | [[Marauroa Chat Tutorial|教程]] | [[Marauroa Chat Tutorial/Text Client|文本客户端]]}}
摘要:
请注意,所有对gamedev的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Gamedev:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
Template:Br
(
编辑
)
Template:Marauroa Chat Tutorial
(
编辑
)
Template:Navigation Menu Marauroa General
(
编辑
)
Template:Navigation Menu Marauroa Internals
(
编辑
)
Template:Navigation Menu Marauroa Users
(
编辑
)
Template:Navigation for Marauroa Top
(
编辑
)
Template:Navigation for Marauroa Users
(
编辑
)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息