以前写过的flash remoting通讯的客户端引擎文件,源码送上,抛砖引玉

本文介绍了一个基于 Flash 的 Remoting 引擎实现细节,包括如何通过 NetConnection 进行远程过程调用,错误处理及队列管理机制。文章还展示了如何处理 session 失效情况下的自动重新登录。

package data

{

import com.adobe.serialization.json.JSON;

import flash.events.AsyncErrorEvent;

import flash.events.Event;

import flash.events.EventDispatcher;

import flash.events.NetStatusEvent;

import flash.net.NetConnection;

import flash.net.ObjectEncoding;

import flash.net.Responder;

public class RemotingEegine

{

//URL

private var gateWayUrl:String;//"http://t3.youxigu.com/yxg/messagebroker/amf";

 //"http://local.youxigu.com/messagebroker/amf";

private static var RemotingEvent:EventDispatcher = new EventDispatcher();

//链连

        private var c_remotingNc:NetConnection;

//返回的数据

private var backDate:String;

//请求的方法

private var m_method:String;

//arrang

private var m_requestList:Array = [];

//arrang 请求单元

private var m_requestAtom:Array = [];

//状态

private var m_state:int;//表示当前的

public function RemotingEegine(_url:String)

{

trace("remoting engine start.........");

gateWayUrl = _url + "messagebroker/amf";

init();

}

private function init():void{

            c_remotingNc = new NetConnection();

            c_remotingNc.objectEncoding = ObjectEncoding.AMF0;

            c_remotingNc.addEventListener(NetStatusEvent.NET_STATUS,netStatus);

            c_remotingNc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncError);

 

        }

        public function callDate(_method:String, _arg:Array, _function:Function):void{

         RemotingEvent.addEventListener(_method, _function);

         //arrang

         m_requestAtom = [_method, _arg, _function];

         m_requestList.push(m_requestAtom);

        

         trace("rangg"+m_requestList.length);

         if(m_requestList.length > 1)return;//超过一个以上则不请求,只排队

         //

         requestStart(m_requestList);

        

        }

        //请求数据

        private function requestStart(_arr:Array):void{

        

         var _method:String = _arr[0][0];

         var _arg:Array = _arr[0][1];

         trace("call--remoting");

         /* 建立连接 */

            c_remotingNc.connect(gateWayUrl);

        

         m_method = _method;

         backDate = null;

         //call eg:"calculate.add"

         if(_arg == null || _arg.length == 0)c_remotingNc.call(_method,new Responder(getMsgResult,getMsgFault));

         else if(_arg.length==1)c_remotingNc.call(_method,new Responder(getMsgResult,getMsgFault),_arg[0]);

         else if(_arg.length==2)c_remotingNc.call(_method,new Responder(getMsgResult,getMsgFault),_arg[0],_arg[1]);

         else if(_arg.length==3)c_remotingNc.call(_method,new Responder(getMsgResult,getMsgFault),_arg[0],_arg[1],_arg[2]);

         else if(_arg.length==4)c_remotingNc.call(_method,new Responder(getMsgResult,getMsgFault),_arg[0],_arg[1],_arg[2],_arg[3]);

         else if(_arg.length==5)c_remotingNc.call(_method,new Responder(getMsgResult,getMsgFault),_arg[0],_arg[1],_arg[2],_arg[3],_arg[4]);

        }

        //netStatus

        private function netStatus(eve:NetStatusEvent):void{

         //

        }

         //asyncError

        private function asyncError(eve:AsyncErrorEvent):void{

         //

        }

        //call back success

        private function getMsgResult(_result:*):void{

            trace(_result);

            backDate = _result;

            try{

             var t_backDate:Object = JSON.decode(backDate);

 

           if(int(t_backDate.warnMessage) == -999999){

            trace("sessionKey"+main3.sessionKey);

            //

            c_remotingNc.call("petRemotingService.login", new Responder(getMsgResult2,function ():void{trace("session-key-error");}), main3.sessionKey);

            return;

           }

       }catch(e:Error){

             trace("JSON.decode(backDate)----error"+m_method);

            }

 

            RemotingEvent.dispatchEvent(new Event(m_method));

            trace("call back--ok");

            trace(m_requestList[0][0]);

            c_remotingNc.close();

 

            RemotingEvent.removeEventListener(m_requestList[0][0], m_requestList[0][2]);

            trace("removeLis---"+m_requestList[0][0]);

 

            //删除顶端数据

            m_requestList.shift();

            //若队列还有数据则继续请求

            if(m_requestList.length > 0)requestStart(m_requestList);

        }

        //getID by key---ok

        private function getMsgResult2(_result:*):void{

         //继续原队列的请求

         requestStart(m_requestList);

        }

        //call back error  

        private function getMsgFault(_fault:*):void{

        

         RemotingEvent.dispatchEvent(new Event(m_method));

         trace("call back--error"+JSON.decode(_fault));

         c_remotingNc.close();

        

         RemotingEvent.removeEventListener(m_requestList[0][0], m_requestList[0][2]);

         trace("removeLis---"+m_requestList[0][0]);

         //删除顶端数据

            m_requestList.shift();

            //若队列还有数据则继续请求

            if(m_requestList.length > 0)requestStart(m_requestList);

        }

        //backDate interface

        public function getBackDate():Object{

         var t_backDate:Object = null;

         try{

         t_backDate = JSON.decode(backDate);

         }catch(eve:Error){

         trace("JSON--JSON--JSON--JSON--JSON----ERROR"+m_method);

         t_backDate = null;

        

         if(m_requestList.length > 0 && m_requestList[0][0] == m_method){

         //删除顶端数据

             m_requestList.shift();

             //若队列还有数据则继续请求

             if(m_requestList.length > 0)requestStart(m_requestList);

         }

         }

 

         return t_backDate;

        }

 

}

}

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值