(一)Hello,World!
第一个关于ElectroServer的程序是喜闻乐见的Hello,World!
最终效果图:
第一步:导入
import com.electrotank.electroserver4.ElectroServer;
import com.electrotank.electroserver4.entities.Protocol;
import com.electrotank.electroserver4.message.event.ConnectionEvent;
import com.electrotank.electroserver4.message.event.PrivateMessageEvent;
import com.electrotank.electroserver4.message.MessageType;
import com.electrotank.electroserver4.message.request.LoginRequest;
import com.electrotank.electroserver4.message.request.PrivateMessageRequest;
import com.electrotank.electroserver4.message.response.LoginResponse;
import flash.display.Sprite;
import flash.events.DataEvent;
import flash.events.Event;
import flash.text.TextField;
第二步:初始化
这里先创建ElectroServer实例,然后监听3个事件,分别是连接、登陆和私信。这里需要注意addEventListener函数不是我们熟悉的写法,而是ElectroServer实例的特殊方法,第二个参数为函数名字符串而不是函数名,第三个参数也是必须的,指定作用域。
然后设置协议,这里是二进制。
创建新的连接,第一个参数为ip地址字符串,第二个参数为端口。
最后创建TextField记录各步骤行为。
es = new ElectroServer();
es.addEventListener(MessageType.ConnectionEvent, "onConnectionEvent", this);
es.addEventListener(MessageType.LoginResponse, "onLogin",this);
es.addEventListener(MessageType.PrivateMessageEvent, "onPrivateMessageEvent", this);
es.setProtocol(Protocol.BINARY);
es.createConnection("127.0.0.1", 9899);
createTextField();
第三步:处理连接响应
如果连接成功则新建登录请求,设置该请求用户名,然后送之。这里需要特别注意函数修饰符为public,不能为private否则报错。其他几个处理函数相同。
public function onConnectionEvent(e:ConnectionEvent):void {
if (e.getAccepted()) {
log("成功连接服务器!");
//build the request
var lr:LoginRequest = new LoginRequest();
lr.setUserName("coolman" + Math.round(10000 * Math.random()));
//send it
es.send(lr);
log("发送登陆请求.");
} else {
log("Connection failed. Reason: " + e.getEsError().getDescription());
}
}
第四步:处理登陆请求响应
如果登陆成功,则发送给服务器一条私信,目标是自己,设置内容后发送之。
public function onLogin(e:LoginResponse):void
{
if (e.getAccepted())
{
log("您已经成功登陆!");
var pmr:PrivateMessageRequest = new PrivateMessageRequest();
pmr.setUserNames([e.getUserName()]);
pmr.setMessage("Hello World!");
es.send(pmr);
log("发送消息!");
}
else
{
log("登陆失败!");
}
}
第五步:处理接受信息响应
直接记录消息内容。
public function onPrivateMessageEvent(e:PrivateMessageEvent):void { log("来自 " + e.getUserName() + "的消息: " + e.getMessage()); }
下面是log函数和createTextField函数:
private function log(description:String):void
{
tf.appendText(description+"\n");
}
private function createTextField():void
{
tf = new TextField();
tf.width = 780;
tf.height = 580;
tf.x = tf.y = 10;
tf.border = true;
addChild(tf);
}
原代码如下: