Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ;
- import nme.display.Sprite;
- import nme.events.Event;
- import nme.events.MouseEvent;
- import nme.Lib;
- import nme.text.TextField;
- import sys.net.Host;
- import sys.net.Socket;
- /**
- * ...
- * @author YellowAfterlife
- */
- class NetActivity {
- public var socket:Socket;
- public function new() {
- socket = new Socket();
- socket.setTimeout(1.0);
- socket.setBlocking(false);
- }
- public function update() {
- }
- public function ping() {
- }
- }
- class NetClient extends NetActivity {
- public function new() {
- super();
- try {
- socket.connect(Main.host, Main.port);
- } catch (z:Dynamic) {
- Lib.trace('Can\'t connect: ' + z);
- return;
- }
- }
- override public function update():Dynamic {
- var data = socket.read();
- if (data != '') {
- Lib.trace('In: ' + data);
- }
- }
- override public function ping():Dynamic {
- socket.write('Client ping!');
- }
- }
- class NetServer extends NetActivity {
- public var clients:Array<Socket>;
- public function new() {
- super();
- socket.bind(Main.host, Main.port);
- socket.listen(3);
- clients = [];
- }
- override public function update():Dynamic {
- // poll clients:
- for (client in clients) {
- try {
- var data = client.read();
- if (data != '') {
- Lib.trace(client.peer().host.toString() + ': ' + data);
- }
- } catch (z:Dynamic) {
- Lib.trace('Polling error: ' + z);
- }
- }
- // accept new clients:
- try {
- var client = socket.accept();
- if (client != null) {
- clients.push(client);
- Lib.trace(client.peer().host.toString() + ' joined.');
- client.write('Welcome');
- }
- } catch (z:Dynamic) {
- // listening fails, but it's considered fine for non-blocking?
- }
- }
- override public function ping():Dynamic {
- for (client in clients) {
- client.write('Server ping!');
- }
- }
- }
- class Main extends Sprite {
- public static var host:Host;
- public static var port:Int = 17051;
- public static var activity:NetActivity;
- var clock:Sprite;
- var btHost:TextField;
- var btJoin:TextField;
- var btTest:TextField;
- function init(e) {
- Lib.trace('Started up.');
- host = new Host('127.0.0.1');
- //
- btHost = new TextField();
- btJoin = new TextField();
- btTest = new TextField();
- // Add buttons
- btHost.x = 20;
- btJoin.x = 150;
- btTest.x = 280;
- btHost.text = 'Host';
- btJoin.text = 'Join';
- btTest.text = 'Test';
- for (bt in [btHost, btJoin, btTest]) {
- bt.width = 100;
- bt.height = 30;
- bt.selectable = false;
- bt.y = 30;
- bt.background = true;
- bt.backgroundColor = 0xd0d0d0;
- Lib.current.addChild(bt);
- }
- // add buttton events:
- btHost.addEventListener(MouseEvent.CLICK, function(e) {
- if (activity != null) return;
- Lib.trace('Server mode.');
- activity = new NetServer();
- });
- btJoin.addEventListener(MouseEvent.CLICK, function(e) {
- if (activity != null) return;
- Lib.trace('Client mode.');
- activity = new NetClient();
- });
- btTest.addEventListener(MouseEvent.CLICK, function(e) {
- if (activity != null) {
- activity.ping();
- } else Lib.trace('There\'s no activity.');
- });
- // Add an event loop handler. It is said that it's the wrong way of doing this.
- Lib.current.addEventListener(Event.ENTER_FRAME, function(e) {
- if (activity != null) activity.update();
- });
- // Add a spinning thing as a lag visualizer:
- clock = new Sprite();
- clock.graphics.beginFill(0x004499);
- clock.graphics.drawRect(0, -4, 64, 8);
- clock.x = 100;
- clock.y = 150;
- Lib.current.addChild(clock);
- Lib.current.addEventListener(Event.ENTER_FRAME, function(e) {
- clock.rotation += 1;
- });
- }
- public function new() {
- super();
- #if iphone
- Lib.current.stage.addEventListener(Event.RESIZE, init);
- #else
- addEventListener(Event.ADDED_TO_STAGE, init);
- #end
- }
- static public function main() {
- var stage = Lib.current.stage;
- stage.scaleMode = nme.display.StageScaleMode.NO_SCALE;
- stage.align = nme.display.StageAlign.TOP_LEFT;
- Lib.current.addChild(new Main());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement