• Sun公司开源游戏服务器Project Darkstar Server(SGS)AS3客户端技术详解(一)


    一、Connecting连接

    sgs客户端第一件要做的事情就是与服务器建立连接。 连接的步骤有以下:

    1、 创建一个SimpleClient实例

    你需要做的第一件事情就是实例化一个SimpleClient.SimpleClient 的构造器需要一个参数:一个 SimpleClientListener ,用于调用通信的事件。在一般基础的客户端程序中,这就相当于一个主类,它的代码的大体看起来如下所示:

    public class Client extends EventDispatcher implements SimpleClientListener
        {
            //....

            client=new  SimpleClient(this);

        }

    2、Create the login properties.创建一个登陆的属性。

    SimpleClient 登陆的方法需要一个参数即可,一个( 属性 ) 对象。在AS3中这个对象由Object构造,这个 SimpleClient的实例设置了两个属性:主机和端口。下面的例子演示了如何设置这些属性: 

    var connectProps:Object=new Object();
    connectProps[ClientConnector.HOST]
    =host;
    connectProps[ClientConnector.PORT]
    =port;

    3、Call the login method.调用登陆方法

    this.client.login(connectProps);

    4、发送验证消息

    为了响应你的登陆请求, API 将调用用 getPasswordAuthentication ( 获取密码验证 ) 来响应你的SimpleClientListener ( 简单客户端的监听器 ) 的用户名和密码的登陆请求。 “ Password ” 在这里是一种常见的验证信息的形式,该验证服务返回给 API( 即客户端 API) 一个二进制的数组 。

    得到什么信息,和你服务器安装的验证程序有关。默认的验证信息是返回密码的完整信息,允许任何人登陆。 PDS 环境也通过验证服务器返回一个 hash 字符串。可以复写其他的验 证者来支持用户特定的验证服务。 

    代码
    private var _user:PasswordAuthentication;
    public function get passwordAuthentication():PasswordAuthentication
            {
                
    return this._user;
            }
            
            
    public function set passwordAuthentication(pauth:PasswordAuthentication):void
            {
                
    this._user=pauth;
            }

    在上面这些步骤中, API 会登陆到服务器。如果登陆成功,将会由 SimpleClientListener 返回返回登陆信息。 SimpleClientListener负责登录的事件处理

    代码
    public function loggedIn():void
            {
                trace(
    "客户端登录成功");
                dispatchEvent(
    new SGSEvent(SGSEvent.LOGIN_SUCCESS));
            }
            
            
    public function loginFailed(reason:String):void
            {
                trace(
    "客户端登录失败");
                dispatchEvent(
    new SGSEvent(SGSEvent.LOGIN_FAILED));
            }
            
            
    public function exceptionThrown(err:String):void
            {
                trace(
    "连接出错了");
                dispatchEvent(
    new ExecptionEvent(err));
                
            }
            
            
    public function joinedChannel(channel:ClientChannel):ClientChannelListener
            {
                
    return null;
            }
            
            
    //接收客户端的数据
            public function receivedClientMessage(message:BeyondoByteArray):void
            {
                var str:String
    =message.readSgsString();
                dispatchEvent(
    new TestMessageEvent(TestMessageEvent.MESSAGEEVENT,str));
                
            }
            
            
    //从新连接
            public function reconnecting():void
            {
            }
            
            
    public function reconnected():void
            {
            }
            
            
    public function disconnected(graceful:Boolean, reason:String):void
            {
                trace(
    "断开连接");
                dispatchEvent(
    new SGSEvent(SGSEvent.DISCONNECTED));
            }

    到此,客户端就连接上了服务器,可以开始和服务器进行通信了。若登 陆失败,登陆失败将会把登陆失败的原因返回,来替代传递一个登陆的字符串信息。

     二、Client/Server Communicatio客户端 / 服务器的通信

           一旦我们和服务器建立了连接,我们就可以和服务器进行通信了。在 sgs环境中有两种通信形式:客户端 / 服务器通信模式和订阅 / 发布通道的通信模式。我们的第一个例子使用客户端 / 服务器模式,该模式是这两者之中最简单的。

          在 PDS 环境中所有的通信都是通过发送和接收标准的二进制格式来完成的。对于 Java 程 序员来说将会看到一些较早形式的通信方式。然而, PDS 环境是一个客户端透明的系统。 PD S的目标是将 J2SE,J2ME, 和 C/C++ 等客户端的 API 接口统一起来。其他平台也可以和 PDS 进行通信,这些会作为后面的开发目标。

          当一些通用语言对象在系统存在时,他们不属于特定的平台,或者是比较复杂,带一些多 余的功能。对于 PDS 的开发团队来说,最好的解决办法就是提供一个通用的、高效的基于发送和接收二进制数据的形式来解决该问题,让特定的应用建立在此基础之上,按他们自己 的需要。 向服务器发送一个数据包,我们所要做的就是将数据包以二进制的形式传递到 SimpleClient对象发送的方法中。

    //发送数据
            public function send(message:String):void
            {
                var buf:BeyondoByteArray
    =new BeyondoByteArray();
                buf.writeUTF(message);
                
    this._client.send(buf);
            }

    当服务器发送一个数据包返回给客户端时,它是通过 SimpleClientListener 监听器将接收的信息返回的。

    代码
    //接收客户端的数据
            public function receivedClientMessage(message:BeyondoByteArray):void
            {
                var str:String
    =message.readSgsString();
                dispatchEvent(
    new TestMessageEvent(TestMessageEvent.MESSAGEEVENT,str));
                
            }
            

     完整的代码详见:

    Sun公司开源游戏服务器Project Darkstar Server(SGS)-----AS3客户端


  • 相关阅读:
    生产者消费者模型
    查看网络通不通的几种方法
    tomcat在45秒内没有启动,启动超时
    request获取各种路径
    修改web项目发布路径
    web.xml不同版本的头
    Web.xml 错误或异常页面配置
    ModelAndView command
    java初始化顺序
    初始化时的过程
  • 原文地址:https://www.cnblogs.com/daidu/p/1617620.html
Copyright © 2020-2023  润新知