1. app.js
// --------------------------------------
// Imports
// --------------------------------------
var net = require('net');
var mySocket;
// --------------------------------------
// Construct The Socket
// --------------------------------------
// create the server and register event listeners
var server = net.createServer(function(socket) {
mySocket = socket;
mySocket.on("connect", onConnect);
mySocket.on("data", onData);
});
// --------------------------------------
// Events
// --------------------------------------
/**
* Handles the Event: "connect"
.
*
*/
function onConnect()
{
console.log("Connected to Flash");
}
/**
* Handles the Event: "data"
.
*
* When flash sends us data, this method will handle it
*
*/
function onData(d)
{
if(d == "exit\0")
{
console.log("exit");
mySocket.end();
server.close();
}
else
{
console.log("From Flash = " + d);
mySocket.write(d, 'utf8');
}
}
// --------------------------------------
// Start the Socket
// --------------------------------------
server.listen(3000, "127.0.0.1");
2. flash (as3)
package
{
// --------------------------------------
// Imports
// --------------------------------------
import flash.display.Sprite;
import flash.events.DataEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.net.XMLSocket;
import flash.text.TextField;
import flash.ui.Keyboard;
// --------------------------------------
// Class
// --------------------------------------
/**
* The NodeJSDemo
class is ...
*
*/
public class NodeJSDemo extends Sprite
{
// --------------------------------------
// Properties
// --------------------------------------
// PUBLIC GETTER/SETTERS
/**
* The core object which connects client to
* server for real-time communication
*/
private var _xmlSocket:XMLSocket;
/**
* The sole UI element to show some test output
*/
private var _textField:TextField;
// PUBLIC CONST
// PRIVATE
// --------------------------------------
// Constructor
// --------------------------------------
/**
* This is the constructor.
*
*/
public function NodeJSDemo()
{
// SUPER
super();
// EVENTS
addEventListener(Event.ADDED_TO_STAGE, _onAddedToStage);
// VARIABLES
// PROPERTIES
_textField = new TextField ();
_textField.width = 300;
_textField.height = 300;
_textField.multiline = true;
_textField.htmlText = "";
addChild(_textField);
// METHODS
}
// --------------------------------------
// Methods
// --------------------------------------
// PUBLIC
/**
* Handles the Event: Event.CHANGE
.
*
* @param aEvent Event
The incoming aEvent payload.
*
* @return void
*
*/
private function _onAddedToStage(aEvent : Event):void
{
// CREATE THE SOCKET AND CONNECT - I'M NOT SURE WHAT PARAMETERS ARE VALID HERE
// BUT IT MUST MATCH THE SETTINGS WITHIN THE 'HelloWorldNodeJS.js' FILE YOU ARE USING
_xmlSocket = new XMLSocket("127.0.0.1", 3000);
// EVENTS
stage.removeEventListener(MouseEvent.CLICK, _onAddedToStage);
//
_xmlSocket.addEventListener(Event.CONNECT, _onConnected);
_xmlSocket.addEventListener(IOErrorEvent.IO_ERROR, _onIOError);
}
// PRIVATE
// --------------------------------------
// Event Handlers
// --------------------------------------
/**
* Handles the Event: Event.CHANGE
.
*
* @param aEvent Event
The incoming aEvent payload.
*
* @return void
*
*/
private function _onConnected(aEvent : Event):void
{
// TRACE
trace("onConnect() aEvent: " + aEvent);
// EVENTS
_xmlSocket.removeEventListener(Event.CONNECT, _onConnected);
_xmlSocket.removeEventListener(IOErrorEvent.IO_ERROR, _onIOError);
//
_xmlSocket.addEventListener(DataEvent.DATA, _onDataReceived);
_xmlSocket.addEventListener(Event.CLOSE, _onSocketClose);
//
stage.addEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
}
/**
* Handles the Event: Event.CHANGE
.
*
* @param aEvent Event
The incoming aEvent payload.
*
* @return void
*
*/
private function _onSocketClose(aEvent : Event):void
{
// TRACE
trace("_onSocketClose aEvent : " + aEvent);
// EVENTS
stage.removeEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
_xmlSocket.removeEventListener(Event.CLOSE, _onSocketClose);
_xmlSocket.removeEventListener(DataEvent.DATA, _onDataReceived);
}
/**
* Handles the Event: KeyboardEvent.KEY_UP
.
*
* @param aEvent KeyboardEvent
The incoming aEvent payload.
*
* @return void
*
*/
private function _onKeyUp(evt:KeyboardEvent):void
{
// HANDLE KEYS
if (evt.keyCode == Keyboard.ESCAPE) {
//1. SEND 'KILL THE SERVER' TO THE SERVER
_xmlSocket.send("exit");
}
else {
//2. SEND ANY NON-ESCAPE KEY'S CODE ('38' FOR EXAMPLE) TO SERVER
// THIS IS A SILLY EXAMPLE OF SENDING A NUMBER TO THE SERVER
// JUST SO THE SERVER CAN SEND IT BACK. SIMPLE.
_xmlSocket.send(evt.keyCode);
}
}
/**
* Handles the Event: DataEvent.DATA
.
*
* @param aEvent DataEvent
The incoming aEvent payload.
*
* @return void
*
*/
private function _onDataReceived(aEvent : DataEvent):void
{
try {
// Show the server data in text
_textField.htmlText += ("From Server: " + aEvent.data + "n");
//scroll down to show latest line
_textField.scrollV = _textField.maxScrollV;
} catch (error : Error) {
// TRACE
trace("_onDataReceived error: " + error);
}
}
/**
* Handles the Event: IOErrorEvent.IO_ERROR
.
*
* @param aEvent IOErrorEvent
The incoming aEvent payload.
*
* @return void
*
*/
private function _onIOError(aEvent : IOErrorEvent):void
{
// TRACE
trace("_onIOError aEvent: " + aEvent);
// EVENTS
_xmlSocket.removeEventListener(Event.CONNECT, _onConnected);
_xmlSocket.removeEventListener(IOErrorEvent.IO_ERROR, _onIOError);
stage.addEventListener(MouseEvent.CLICK, _onAddedToStage);
}
}
}