Flash + Java Socket ตอนที่ 2 by

1
Feb
0

ไฟล์ .as ต่างๆ

    Main.as
    Login.as
    Lobby.as
    AppManager.as
    Connector.as
    GlobalVar.as
    ChatEvent.as
    ConnectorInterface.as

Main.as

    ตัวจัดการหลักจะเป็น Class AppManager ครับ

package app.flash.common {
import flash.display.MovieClip;
public class Main extends MovieClip {
private static var self:Main = null;
public static function getInstance(){
return self;
}
public function Main() {
self = this;
(AppManager.getInstance()).startApp();
this.addChild(Login.getInstance());
}
}
}

Login.as
หน้า login
package app.flash.common{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.events.MouseEvent;
public class Login extends MovieClip {
private static var self:Login = null;
private var nameTxt:TextField;
public static function getInstance() {
if (self==null) {
self = new Login();
}
return self;
}
private static function onClicked(e:MouseEvent) {
var login:Login = Login.getInstance();
if (login.nameTxt.text != "") {
var global:GlobalVars = GlobalVars.getInstance();
global.userName = login.nameTxt.text;
var main:Main = Main.getInstance();
main.removeChildAt(0);
main.addChild(global.lobby);
}
}
public function Login() {
nameTxt = name_txt;
nameTxt.border = true;
nameTxt.borderColor = 0xffffff;
nameTxt.text = "";
submit_mc.addEventListener(MouseEvent.CLICK,onClicked);
}
}

}

Lobby.as
ส่วนของ lobby หลักใช้เป็นแค่ Display
package app.flash.common{
import flash.display.MovieClip;
import flash.text.TextField;
public class Lobby extends MovieClip {
public var showTxt:TextField;
public var inputChatTxt:TextField;
public function Lobby() {
showTxt = show_txt;
inputChatTxt = inputChat_txt;
inputChatTxt.border = true;
inputChatTxt.borderColor = 0x000000;
showTxt.text = "chat start::\n";
}
}
}

AppManager.as

package app.flash.common{
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.MovieClip;

public class AppManager implements ConnectorInterface {
private static var self:AppManager = null;
public var socket:Connector = new Connector();
private var chatEvent:ChatEvent = null;
private var global:GlobalVars = GlobalVars.getInstance();
public static function getInstance():AppManager {
if (self == null) {
self = new AppManager();
}
return self;
}
public function sendMessage(msg:String) {
msg = "0( " + global.userName + " ) say: " + msg;
socket.sendMessage(msg);
}
public function onLobby(e:Event) {
var localChatEvent:ChatEvent = e.target as ChatEvent;
var input:String = localChatEvent.msg;
var lobby:Lobby = (GlobalVars.getInstance()).lobby;
lobby.showTxt.appendText(input);
trace("AppManager.onLobby");
}

public function onStart():void {
trace("Connector start");
global.connected = true;
chatEvent = new ChatEvent(socket);
chatEvent.addEventListener("onLobbyMessage",onLobby);
}
public function onTerminate():void {
trace("Connector terminate");
}
public function onMessage(input:String):void {
trace("onMessage from main");
}
public function onError():void {
trace("onError from main");
global.connected = false;
}
public function startApp():void {
socket.host = "localhost"; // url ของ server ในตัวอย่างนี้ใช้ localhost
socket.port = 8080; // port ที่ใช้ในการ connect เข้าไป
socket.delegate = this;
socket.startConnect(); // สั่งให้ socket connect socket.connect(host,port);
}
}
}

Connector.as
package app.flash.common{
import flash.net.Socket;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.system.Security;
import flash.utils.ByteArray;
public class Connector extends Socket {
public static var self:Connector = null;
public var delegate:ConnectorInterface = null;
public var host:String;
public var port:int;
public var msg:String;
public function startConnect() {
this.connect(host,port);

}
// function นี้ใช้สำหรับส่ง ข้อมูลไปให้ server ที่เราได้ทำการ connect ไว้ตั้งแต่ตอนแรก
public function sendMessage(sender:String) {
trace("send '"+sender+"' to server");
this.writeUTFBytes(sender+"\n");
this.flush();
trace("end");
}
private static function onConnected(e:Event):void {
self.delegate.onStart(); //ส่งไปบอก AppManager ว่าทำการ connect server สำเร็จ
}
private static function onError(e:IOErrorEvent):void {
self.delegate.onError();
}

private static function onMessage(e:ProgressEvent):void {
try {
var msg:String = self.readUTFBytes(self.bytesAvailable); // ข้อมุลที่ได้จากทางฝั่ง server
self.msg = msg;
} catch (e:Event) {
trace(e.toString());
}
}
private static function onServerClose(e:Event):void {
self.delegate.onTerminate();
}
private static function sError(SecurityErrorEvent):void {
trace("security error");
}
public function Connector() {
self = this;
this.objectEncoding = 0;
this.addEventListener(Event.CONNECT,onConnected); // connect to server
this.addEventListener(IOErrorEvent.IO_ERROR,onError);
this.addEventListener(ProgressEvent.SOCKET_DATA,onMessage); //เมื่อได้รับข้อมุลจากทาง server Event ตัวนี้จะทำงานก็ต่อเมื่อ server มีการส่งข้อมูลเข้ามา
this.addEventListener(Event.CLOSE,onServerClose);
this.addEventListener(SecurityErrorEvent.SECURITY_ERROR,sError);
}
}
}

GlobalVar.as
package app.flash.common{
import flash.events.MouseEvent;
public class GlobalVars {
private static var self:GlobalVars = null;
public var lobby:Lobby = new Lobby();
public var login:Login = Login.getInstance();
public var connected:Boolean = false;
public var userName:String;
public function settingLobby() {
lobby.sender_mc.addEventListener(MouseEvent.CLICK,function(e:*){
var app:AppManager = AppManager.getInstance();
app.sendMessage(lobby.inputChatTxt.text); //ส่งข้อความไปให้ AppManager เพื่อที่จะส่งไปให้ server
lobby.inputChatTxt.text = "";
});
}
public static function getInstance() {
if (self== null) {
self = new GlobalVars();
self.settingLobby();
}
return self;
}
}
}

ChatEvent.as
เราสามารถสร้าง custom event เพื่อแยกข้อมุลแต่ละประเภทออกเป็นส่วนๆ
โดยในตัวอย่างนี้ ยกตัวอย่างเฉพาะ lobby ถ้าหากต้องการเพิ่มเติมก็สามารถเพ่ิม case ต่างๆที่หลังได้ เช่น lobby , room, private
package app.flash.common{
import flash.events.EventDispatcher;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.net.Socket;

public class ChatEvent extends EventDispatcher {
private static var self:ChatEvent = null;
private static var LOBBY:int = 0;
private static var socket:Connector = null;
public var msg:String = new String();
public static function onMessage(e:ProgressEvent) {
try {
trace("chatEvent:"+socket.msg);
self.msg = socket.msg;
var checker:Number = new Number(self.msg.charAt(0));
self.msg = self.msg.substring(1,self.msg.length);
switch (checker) {
case LOBBY :
self.dispatchEvent(new Event("onLobbyMessage"));
break;
}

} catch (e:Event) {
trace(e.toString());
}
}
public function ChatEvent(socketIn:Connector) {
self = this;
socket = socketIn;
socket.addEventListener(ProgressEvent.SOCKET_DATA,onMessage);
}
}
}

ConnectorInterface.as
package app.flash.common{
public interface ConnectorInterface {
function onStart():void;
function onTerminate():void;
function onMessage(input:String):void;
function onError():void;
}
}

Flash + Java Socket ตอนที่ 1

http://blog.levelup.in.th/2013/01/31/flash-java-socket-ตอนที่-1/

Flash + Java Socket ตอนที่ 3 จะเป็นในส่วนของ java socket

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน