亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smartmessenger.as

?? 用ACTIONSCRIPT編寫的簡單實時消息發送軟件源代碼。開發平臺為FLEX。
?? AS
字號:
/**
 * SmartMessenger Example Application for SmartFoxServer PRO
 * Flex 2 / Actionscript 3.0 version
 * 
 * version 1.0.0
 * (c) gotoAndPlay() 2007
 * 
 * www.smartfoxserver.com
 * www.gotoandplay.it
 */

import it.gotoandplay.smartfoxserver.*;
  
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.IOErrorEvent;
import mx.controls.Alert;import mx.collections.ArrayCollection;import mx.collections.Sort;import mx.collections.SortField;import mx.managers.PopUpManager;import components.ChatWindow;import mx.core.IFlexDisplayObject;import mx.controls.Button;import mx.controls.RadioButton;
 
 
//--- Private members -----------------------------------------------
private var sfs:SmartFoxClient
private var serverIp:String = "127.0.0.1"
private var serverPort:int = 9339
private var serverZone:String = "messenger"
private var xtName:String = "smsg"

private var myId:int
private var myName:String
private var isLobbyJoined:Boolean = false
private var componentsReady:Boolean = false
private var curBrowserId:int
private var chatWindowList:Array
private var lastFocusedChatWindow:ChatWindow

private const configFile:String = "./config.xml";

[Embed(source="images/light_grey.png")]
private static var STATUS_OFFLINE:Class;

[Embed(source="images/light_green.png")]
private static var STATUS_AVAILABLE:Class;

[Embed(source="images/light_yellow.png")]
private static var STATUS_BRB:Class;

[Embed(source="images/light_red.png")]
private static var STATUS_BUSY:Class;

private static var TOKEN:String = "$$$"


/**
* Application init
*/
public function initApp():void
{	
	chatWindowList = []
	sfs = new SmartFoxClient(true)
	
	sfs.addEventListener(SFSEvent.onConnection, onConnection)
	sfs.addEventListener(SFSEvent.onExtensionResponse, onExtensionResponse)
	sfs.addEventListener(SFSEvent.onRoomListUpdate, onRoomListUpdate)
	sfs.addEventListener(SFSEvent.onJoinRoom, onJoinRoom)
	sfs.addEventListener(SFSEvent.onBuddyList, onBuddyList)
	sfs.addEventListener(SFSEvent.onBuddyListError, onBuddyListError)
	sfs.addEventListener(SFSEvent.onBuddyListUpdate, onBuddyListUpdate)
	sfs.addEventListener(SFSEvent.onPrivateMessage, onPrivateMessage)
	sfs.addEventListener(SFSEvent.onConnectionLost, onConnectionLost)
	sfs.addEventListener(SFSEvent.onLogout, onLogout)
	
	loadConfigData()		
}


/**
 * load xml configuration file
 */
private function loadConfigData():void
{
	var loader:URLLoader = new URLLoader()
	loader.addEventListener(Event.COMPLETE, onConfigLoaded)
	loader.addEventListener(IOErrorEvent.IO_ERROR, onConfigLoadFailed)
	
	loader.load(new URLRequest(configFile))
}


/**
 * handles the successfull loading of the config file
 */
public function onConfigLoaded(evt:Event):void
{
	var loader:URLLoader = evt.target as URLLoader
	var xmlDoc:XML = new XML(loader.data)
	
	serverIp = xmlDoc.ip
	serverPort = int(xmlDoc.port)
	serverZone = xmlDoc.zone 
	xtName = xmlDoc.xtName
	
	connect()
}

/**
* Establish connection with the server
*/
public function connect():void
{
	sfs.connect(serverIp, serverPort)
}


/**
 * Handles configuration load failure
 */
public function onConfigLoadFailed(evt:Event):void
{
	lb_connStatus.text = "Failed loading configuration file"	
}


/**
 * Handles click on the login button
 */
public function bt_login_click():void
{
	if (tf_name.text.length > 0)
	{
		sfs.login(serverZone, tf_name.text, "")
	}	
}

/**
 * Handle click on the logout button
 */
public function bt_logout_click(evt:Event):void
{
	sfs.logout();
}


/**
 * Handles click on the "Add to buddy list"
 */
public function bt_add_buddy():void
{
	var buddyName:String = uBrowser.tf_nick.text
	
	if (myName != buddyName)
		sfs.addBuddy(buddyName)
}


/**
 * Handles click on the "Remove" button
 */
public function bt_remove_buddy():void
{
	if (cList.list_buddies.selectedItem != null)
	{
		var buddyName:String = cList.list_buddies.selectedItem.data.name
		sfs.removeBuddy(buddyName)	
	}
}


/**
 * Handles click on the "Message" button
 */
public function bt_message_buddy():void
{
	if (cList.list_buddies.selectedItem != null)
	{
		var buddy:Object = cList.list_buddies.selectedItem.data
	
		startNewPrivateChat(buddy)
	}
}


/**
 * Handles click on the "Send" button in the chat window
 */
public function bt_send_message(evt:Event):void
{
	var window:ChatWindow = (evt.target as Button).parentDocument as ChatWindow
	
	if (window.tf_message.text.length > 0)
	{
		sfs.sendPrivateMessage(myId + TOKEN + window.tf_message.text, window.buddy.id)
		window.tf_message.text = ""
		
		lastFocusedChatWindow = window
	}
}


/**
 * Handles click on the "X" button in the Chat Window
 */
public function bt_close_chat(evt:Event):void
{
	var window:ChatWindow = evt.target as ChatWindow
	var buddy:Object = window.buddy
	PopUpManager.removePopUp(window)
	
	// Remove from list
	delete chatWindowList[buddy.name]	
}


/**
 * Set the IM current status
 * 0 = available
 * 1 = be right back
 * 2 = busy
 */
public function handle_status_change(evt:Event):void
{
	var radioBtn:RadioButton = evt.target as RadioButton
	var bvars:Array = []
	bvars["st"] = radioBtn.value
	
	sfs.setBuddyVariables(bvars)
}


/**
 * 
 */
public function backToLoginScreen():void
{
	viewstack.selectedChild = view_connecting
	connect()
}


/**
* Request the next user
*/
public function requestNextUser():void
{
	sfs.sendXtMessage(xtName, "nextU", {id:curBrowserId})
}

	
/**
* Request the previous user
*/
public function requestPrevUser():void
{
	sfs.sendXtMessage(xtName, "prevU", {id:curBrowserId})
}


/**
 * Start a new chat window
 */
private function startNewPrivateChat(buddy:Object):void
{
	if (buddy.isOnline)
	{
		var window:ChatWindow = new ChatWindow()
		window.title = "Private Chat with " + buddy.name
		window.buddy = buddy
		PopUpManager.addPopUp(window, this)
		PopUpManager.centerPopUp(window)
		
		randomMoveWindow(window)
		
		// keep a reference to the window
		chatWindowList[buddy.name] = window
	}
}


/**
 * Slightly alter the position of the window
 * once centered
 */
private function randomMoveWindow(win:ChatWindow):void
{
	var dx:int = int(Math.random() * 20)
	var dy:int = int(Math.random() * 20)
	var sx:int = Math.random() * 100 > 49 ? 1 : -1
	var sy:int = Math.random() * 100 > 49 ? -1 : 1
	
	win.x += dx * sx
	win.y += dy * sy
}


/**
 * Event is fired when the messenger view is ready
 */
public function onMessengerViewReady():void
{
	if (!componentsReady)
		componentsReady = true
		
	cList.rb_available.selected = true
	cList.title = myName + "'s Buddy List"	
	// Load the buddy list
	sfs.loadBuddyList()
	
	// Init the members browser
	requestNextUser()
}


/**
 * handles the icon in the buddy list (mx:List component)
 */
public function blistIconFunction(o:Object):Class
{
	var buddy:Object = o.data
	var icon:Class = STATUS_OFFLINE
	
	if (buddy.isOnline)
	{
		icon = STATUS_AVAILABLE
		
		if (buddy.variables.st != undefined)
		{
			if (buddy.variables.st == 1)
				icon = STATUS_BRB
			else if (buddy.variables.st == 2)
				icon = STATUS_BUSY
		}
		else
			icon = STATUS_AVAILABLE
	}
		
	return icon 
}


/**
* Find the buddy name
* 
* @param	id	the buddy id
* @return	the buddy name
*/
private function getBuddy(id:int):Object
{
	var b:Object = null
	
	for each (var buddy:Object in sfs.buddyList)
	{			
		if (buddy.id == id)
		{
			b = buddy
			break
		}
	}
	 
	 return b
}


//------------------------------------------------------------------------
// SmartFoxServer event handlers
//------------------------------------------------------------------------

public function onConnection(evt:SFSEvent):void
{
	var ok:Boolean = evt.params.success
				
	if (ok)
	{
		// Change view: login
		viewstack.selectedChild = view_login
	}
	else
	{
		// Show error
		lb_connStatus.text = "Failed connecting to " + serverIp + ":" + serverPort 
	}
}


public function onExtensionResponse(evt:SFSEvent):void
{
	var dataObj:Object = evt.params.dataObj
	var cmd:String = dataObj._cmd
	
	// Login success
	if (cmd == "logOK")
	{
		myId = dataObj.id
		myName = dataObj.name
		sfs.getRoomList()
	}
	
	// Login failed
	else if (cmd == "logKO")
	{
		Alert.show(dataObj.err, "Login Failed", mx.controls.Alert.OK)
	}
	
	// user profile loaded
	else if (cmd == "usr")
	{
		if (!uBrowser.bt_add.enabled)
		{
			uBrowser.bt_add.enabled = true
			uBrowser.bt_next.enabled = true
			uBrowser.bt_prev.enabled = true
		}
		
		curBrowserId = dataObj.id
		var user:Object = dataObj.usr
		
		uBrowser.tf_nick.text = user.nick
		uBrowser.tf_age.text = user.age
		uBrowser.tf_location.text = user.location
		uBrowser.tf_email.text = user.email
		uBrowser.tf_hobbies.text = user.interest
	}
}



public function onRoomListUpdate(evt:SFSEvent):void
{
	// Auto join default room
	sfs.autoJoin()
}


public function onJoinRoom(evt:SFSEvent):void
{
	if (!isLobbyJoined)
	{
		isLobbyJoined = true;
		
		// Change view, this will fire -> onMessengerViewReady()
		viewstack.selectedChild = view_chat
		
		// This event is fired once only, when the viewstack first initialize the view
		// So we need to fire it manually in case you move away from the "chat" view
		if (componentsReady)
			onMessengerViewReady()
	}
}


// Populate the buddy list
public function onBuddyList(evt:SFSEvent):void
{
	var dp:ArrayCollection = new ArrayCollection()
		
	for each (var buddy:Object in evt.params.list)
	{
		dp.addItem( {label:buddy.name, data:buddy} )
	}
	
	// Sort provider alphabetically
	var sort:Sort = new Sort()
	sort.fields = [new SortField("label")]
		
	dp.sort = sort
	dp.refresh()
	
	cList.list_buddies.dataProvider = dp
	cList.list_buddies.invalidateList()
}


// Handle errors in loading the buddylist
public function onBuddyListError(evt:SFSEvent):void
{
	Alert.show("Error loading buddy list", "BuddyList Load error", mx.controls.Alert.OK);	
}


// Handle updates in the buddy list
public function onBuddyListUpdate(evt:SFSEvent):void
{
	var buddy:Object = evt.params.buddy
	var dp:ArrayCollection = cList.list_buddies.dataProvider as ArrayCollection

	// Look for the item with the same name of the item passed to the function
	for (var i:int = 0; i < dp.length; i++)
	{
		var b:Object = dp.getItemAt(i).data

		if (buddy.name == b.name)
		{
			// Replace item
			dp.setItemAt({label:buddy.name, data:buddy}, i)
			break		}	}
	
	// Update list
	dp.refresh()
	cList.list_buddies.invalidateList()
	
	// Update chat window, if exist
	var window:ChatWindow = chatWindowList[buddy.name]
	
	if (window != null)
	{
		window.vbox.enabled = buddy.isOnline
		window.buddy = buddy
		
		if (!buddy.isOnline)
			window.ta_chat.htmlText += "<font color='#FF3300'>" + buddy.name + " went offline!</font>"
		else
		{
			var status:String = "available"
			if (buddy.variables.st == 1)
				status = "away"
			else if (buddy.variables.st == 2)
				status = "busy"
				
			window.ta_chat.htmlText += "<font color='#FF3300'>" + buddy.name + " is now " + status + " !</font>"
		}	
		window.ta_chat.verticalScrollPosition = window.ta_chat.maxVerticalScrollPosition
		
	}	}


/**
 * Handles private messages
 * 
 * messages are made of two parameters:
 * senderId and message separated by a token, defined as "const" at the top of this code
 * 
 * When we get a PM, first we split the text into its 2 components
 * and then we proceed to show it in the right chat window.
 * 
 */
public function onPrivateMessage(evt:SFSEvent):void
{
	var pm:String = evt.params.message
	
	if (pm.indexOf(TOKEN) > 0)
	{
		var data:Array = pm.split(TOKEN)
			
		var senderId:int = int(data[0])
		var message:String = data[1]
		
		var sender:Object
		var senderName:String
		var win:ChatWindow
	
		/**
		 * If it's not me the one who sent the message then
		 * let's look for the right window to show this message in
		 */
		if (senderId != myId)
		{
			sender = getBuddy(senderId)
			
			if (sender != null)
			{
				// Check if chat window exist
				if (chatWindowList[sender.name] == null)
					startNewPrivateChat(sender)
					
				win = chatWindowList[sender.name]
				senderName = sender.name
			}
			
		}
		
		/**
		 * ... otherwise we can add the message
		 * to the last selected chat window
		 */
		else
		{
			win = lastFocusedChatWindow
			senderName = myName
		}
		
		win.ta_chat.htmlText += "<b><font color='#cc0000'>" + senderName + ": </font></b>" + message
		win.ta_chat.verticalScrollPosition = win.ta_chat.maxVerticalScrollPosition
	}
}


/**
 * Handle connection lost
 */ 
public function onConnectionLost(evt:SFSEvent):void
{
	resetChat()
	viewstack.selectedChild = view_logout
}

public function onLogout(evt:SFSEvent):void
{
	resetChat()
	viewstack.selectedChild = view_login
}

/**
 * Clear all chat windows
 * reset join status
 */
private function resetChat():void
{
	// reset flag
	isLobbyJoined = false
	
	// close all open chats
	for each (var win:ChatWindow in chatWindowList)
	{
		PopUpManager.removePopUp(win)
	}
	
	chatWindowList = []
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲韩国一区二区三区| 蓝色福利精品导航| 精彩视频一区二区三区| 色婷婷久久久久swag精品 | 国产三级一区二区三区| 亚洲欧美经典视频| 国产精品一区2区| 日韩一区二区三区观看| 亚洲精品欧美激情| 成人黄色大片在线观看| 精品久久久网站| 日本在线不卡视频| 色88888久久久久久影院按摩| 亚洲国产精品v| 韩国欧美国产一区| 制服丝袜成人动漫| 亚洲电影第三页| 91福利视频在线| 亚洲综合自拍偷拍| 色呦呦日韩精品| 亚洲精品乱码久久久久| 99视频有精品| 国产精品美女久久福利网站| 国产精品一区二区久久精品爱涩| 欧美一区午夜精品| 五月天久久比比资源色| 色婷婷亚洲综合| 亚洲一区二区成人在线观看| av在线不卡电影| 国产精品毛片大码女人| 成人性生交大片免费看在线播放| 精品国产91乱码一区二区三区| 免费成人在线视频观看| 欧美成人官网二区| 精品一区二区三区久久久| 精品国产一区二区亚洲人成毛片| 免费视频一区二区| 欧美不卡一区二区三区| 黑人巨大精品欧美一区| 久久亚洲免费视频| 国产日本欧美一区二区| 成人影视亚洲图片在线| 2023国产精品| 国产99久久久国产精品潘金| 中文字幕制服丝袜成人av| 成人av网站在线| 亚洲人成精品久久久久久| 欧美影片第一页| 日韩精品久久久久久| 精品va天堂亚洲国产| 国产suv一区二区三区88区| 中文字幕亚洲一区二区av在线| 91在线视频免费观看| 亚洲精品国产精品乱码不99| 欧美精品xxxxbbbb| 国产一区二区三区电影在线观看| 国产精品污污网站在线观看| 色婷婷综合激情| 日韩电影在线一区二区三区| 欧美国产97人人爽人人喊| 一本色道亚洲精品aⅴ| 日本不卡不码高清免费观看| 久久精品夜夜夜夜久久| 色老汉av一区二区三区| 蜜臀精品一区二区三区在线观看| 国产日韩欧美高清| 欧美色爱综合网| 国产成人在线视频免费播放| 亚洲手机成人高清视频| 日韩欧美久久久| 99re这里都是精品| 久久99国产精品久久99| 亚洲视频一二三区| 精品国产乱码久久久久久老虎| 99久久99久久综合| 久草在线在线精品观看| 一区二区在线观看免费| 久久亚洲综合色一区二区三区| 一本色道久久综合狠狠躁的推荐| 美女免费视频一区二区| 亚洲人成精品久久久久| 国产午夜精品福利| 制服.丝袜.亚洲.中文.综合| 成人丝袜高跟foot| 美女视频网站久久| 亚洲成人综合网站| 国产精品久久三区| 精品久久人人做人人爱| 欧美日韩国产123区| 91香蕉视频污| 国产mv日韩mv欧美| 老司机精品视频导航| 亚洲一区二区视频在线观看| 国产精品毛片a∨一区二区三区| 欧美精品一区二区三区蜜桃视频 | 国产精品天干天干在线综合| 欧美美女bb生活片| 色就色 综合激情| 成人免费观看视频| 国产不卡视频在线观看| 久久国产精品区| 日本中文字幕一区二区有限公司| 亚洲精品日韩一| 国产精品对白交换视频| 欧美极品少妇xxxxⅹ高跟鞋 | 日韩一级免费一区| 欧美日韩一区二区三区在线看| 99久久国产综合精品色伊| 懂色av一区二区三区蜜臀| 韩日av一区二区| 激情成人午夜视频| 麻豆成人91精品二区三区| 免费观看成人av| 青青草原综合久久大伊人精品| 亚洲va韩国va欧美va精品| 亚洲成在线观看| 日韩国产欧美在线播放| 亚洲线精品一区二区三区| 亚洲综合无码一区二区| 亚洲国产人成综合网站| 尤物av一区二区| 午夜久久电影网| 日韩av高清在线观看| 奇米影视一区二区三区小说| 国内成人免费视频| 丁香啪啪综合成人亚洲小说| 国产真实乱偷精品视频免| 国产成人一区在线| 不卡影院免费观看| 欧美又粗又大又爽| 91精品国产一区二区| 欧美精品一区二区三区一线天视频| 久久无码av三级| 日韩一区中文字幕| 亚洲综合小说图片| 九九视频精品免费| 成人福利视频网站| 欧美唯美清纯偷拍| 欧美一级一区二区| 国产欧美1区2区3区| 亚洲婷婷综合色高清在线| 日日摸夜夜添夜夜添亚洲女人| 久久99国产精品麻豆| 99国产一区二区三精品乱码| 91黄视频在线| 欧美电影精品一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 一区二区激情小说| 韩国女主播成人在线观看| 99这里都是精品| 欧美一卡在线观看| 国产精品免费视频观看| 午夜精品久久久久久久久久久| 国产一区二区在线影院| 欧洲一区在线电影| 久久久精品国产免大香伊| 亚洲黄色片在线观看| 国内精品写真在线观看| 精品视频一区 二区 三区| 国产亚洲精品资源在线26u| 午夜电影久久久| 99国产精品一区| 久久综合久色欧美综合狠狠| 亚洲精品成a人| 丰满亚洲少妇av| 91精品国产91久久久久久最新毛片 | 久久综合九色综合欧美98| 亚洲一区二区三区四区五区黄| 国产乱子伦视频一区二区三区 | 精品污污网站免费看| 国产农村妇女毛片精品久久麻豆 | 夜夜爽夜夜爽精品视频| 国产麻豆精品在线观看| 欧美精品视频www在线观看| 亚洲视频一区二区免费在线观看| 狠狠色丁香婷婷综合| 88在线观看91蜜桃国自产| 洋洋成人永久网站入口| 丰满少妇久久久久久久| 久久只精品国产| 免费精品视频最新在线| 欧美曰成人黄网| 一区二区三区小说| 国产98色在线|日韩| 久久夜色精品国产噜噜av| 免费美女久久99| 欧美一区二区三区影视| 亚洲成人免费观看| 欧美三级韩国三级日本一级| 亚洲色图欧美在线| 成人午夜私人影院| 国产丝袜欧美中文另类| 国产精品一二二区| 久久―日本道色综合久久| 美女久久久精品| 欧美岛国在线观看| 久久国产尿小便嘘嘘尿| 337p粉嫩大胆噜噜噜噜噜91av| 蜜臀久久99精品久久久久久9| 欧美大黄免费观看|