flex通过socket json与后台通讯

来源:互联网 发布:windows api窗口函数 编辑:程序博客网 时间:2024/05/24 01:46
package com.superstar2.portal.model.logic
{


import com.adobe.serialization.json.JSON;                                     //json序列号包
import com.superstar2.portal.common.hashMap.HashMap;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.net.Socket;
import flash.utils.ByteArray;

import mx.controls.Alert;


public class ShowerRoomSocket extends EventDispatcher
{


private static var _instence:ShowerRoomSocket;
private var socket:Socket;
public static var hashMap:HashMap;


public function ShowerRoomSocket(c:C, target:IEventDispatcher=null)
{
super(target);
socket=new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onServerClose); //只有服务器关闭链接时 才分派此事件
socket.addEventListener(IOErrorEvent.IO_ERROR, onIo_Error); //在指定了主机但出现输入/输出错误并由此导致连接失败时分派。
socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); //在指定了主机但出现输入/输出错误并由此导致连接失败时分派。(
hashMap=new HashMap();
}


public static function getInstence():ShowerRoomSocket
{
if (_instence == null)
{
_instence=new ShowerRoomSocket(new C);
}
return _instence;
}


/**链接服务器*/
public function connect(address:String, port:int):void
{
try
{
socket.connect(address, port);
}
catch (err:Error)
{
Alert.show(err.message);
}
}


/**链接服务器成功*/
private function onConnect(event:Event):void
{

// Alert.show("链接服务器成功");
}


/**服务器端socket关闭*/
private function onServerClose(event:Event):void
{
// Alert.show("服务器链接关闭 链接断开");
}


/**输入输出错误*/
private function onIo_Error(event:IOErrorEvent):void
{
// Alert.show("输入输出错误");
}


/**发送数据*/
public function send(obj:Object,index:int, callBackFunc:Function=null):void
{
//存储回调函数
if (callBackFunc != null)
{
hashMap.put(index, callBackFunc);
}
var str:String=JSON.encode(obj);
var bArray:ByteArray=new ByteArray();
bArray.writeMultiByte(str, "UTF-8");
var beArray:ByteArray=new ByteArray();
beArray.writeBytes(bArray);
socket.writeBytes(beArray);
socket.flush();
}


/**接收数据*/
private function onSocketData(event:ProgressEvent):void
{
if (socket.bytesAvailable)
{
var str:String=socket.readMultiByte(socket.bytesAvailable, "UTF-8");
str=str.replace(/\s/g, '');
var obj:Object=JSON.decode(str);
trace("数据:" + str);
var callBackFunc:Function=hashMap.getValue(obj.Chat_Type) as Function;
if(callBackFunc!=null)
{
callBackFunc(obj);
}
}


}
}
}


class C
{
}