From cfb9ddc8f84836d0b295da314ec92e3e8220d1b1 Mon Sep 17 00:00:00 2001 From: shmyga Date: Fri, 27 Mar 2020 16:25:16 +0300 Subject: [PATCH] [app] add Network --- gulpfile.js | 3 + package-lock.json | 112 +++++++++--------- src/app/haxe/ru/m/puzzlez/PuzzlezApp.hx | 9 +- src/app/haxe/ru/m/puzzlez/net/Network.hx | 60 ++++++++++ .../haxe/ru/m/puzzlez/view/PuzzlezAppView.hx | 7 +- .../ru/m/puzzlez/view/PuzzlezAppView.yaml | 15 ++- src/server/haxe/ru/m/puzzlez/PuzzlezServer.hx | 6 +- 7 files changed, 140 insertions(+), 72 deletions(-) create mode 100644 src/app/haxe/ru/m/puzzlez/net/Network.hx diff --git a/gulpfile.js b/gulpfile.js index 73be9e0..bb02a5b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -46,6 +46,9 @@ const config = new Project.Config({ macros: [ `CompilationOption.set('build','${dateformat(new Date(), 'yyyy-mm-dd HH:MM:ss')}')`, ], + flags: [ + //'proto_debug', + ] }); const app = new Project( diff --git a/package-lock.json b/package-lock.json index f12f977..720323c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "puzzlez", - "version": "0.1.0", + "version": "0.4.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -124,9 +124,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -471,18 +471,20 @@ } }, "bl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz", - "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "dev": true, "requires": { - "readable-stream": "^3.0.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" }, "dependencies": { "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -595,9 +597,9 @@ "dev": true }, "buffer": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", - "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -785,9 +787,9 @@ } }, "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "class-utils": { @@ -814,9 +816,9 @@ } }, "cli-progress": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.5.0.tgz", - "integrity": "sha512-S1wR4xfcfLWbVBH6RwYat1nMCm2UsuygxNoiRYVAXQsuWKjCRgWRZVohXLmsWfiuAK0FFf7t9OyZ2JBmDWaQGA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.6.0.tgz", + "integrity": "sha512-elg6jkiDedYrvwqWSae2FGvtbMo37Lo04oI9jJ5cI43Ge3jrDPWzeL3axv7MgBLYHDY/kGio/CXa49m4MWMrNw==", "dev": true, "requires": { "colors": "^1.1.2", @@ -1078,9 +1080,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -1180,9 +1182,9 @@ "dev": true }, "defer-to-connect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.1.tgz", - "integrity": "sha512-J7thop4u3mRTkYRQ+Vpfwy2G5Ehoy82I14+14W4YMDLKdWloI9gSzRbV30s/NckQGVJtPkWNcW4oMAUigTdqiQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, "define-properties": { @@ -2771,9 +2773,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "object-assign": { @@ -2836,9 +2838,9 @@ } }, "gulp-haxetool": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/gulp-haxetool/-/gulp-haxetool-0.1.4.tgz", - "integrity": "sha512-/GAw7E6wwaB4jI+o7HqM0/TXJhbW5BqzuktJpUZJukfKn60n9tx3fpem/jABe4tYmNNRrt716hnbcRFXJKKjfQ==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/gulp-haxetool/-/gulp-haxetool-0.1.7.tgz", + "integrity": "sha512-V9/0oToVWZONzmzrONfMo1V2vXBT+TdCaGm1uZyiX4j9jDEvD7awJ8T7mJhWywm2z2CLsZUKiOMWXpP1//eT8Q==", "dev": true, "requires": { "ansi-colors": "^1.1.0", @@ -3276,9 +3278,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-errors": { @@ -4179,18 +4181,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" }, "dependencies": { "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -4627,9 +4629,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -5462,12 +5464,12 @@ } }, "tar-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz", - "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", "dev": true, "requires": { - "bl": "^3.0.0", + "bl": "^4.0.1", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -5475,9 +5477,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -6164,9 +6166,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", diff --git a/src/app/haxe/ru/m/puzzlez/PuzzlezApp.hx b/src/app/haxe/ru/m/puzzlez/PuzzlezApp.hx index d9894b6..a64f630 100644 --- a/src/app/haxe/ru/m/puzzlez/PuzzlezApp.hx +++ b/src/app/haxe/ru/m/puzzlez/PuzzlezApp.hx @@ -1,12 +1,8 @@ package ru.m.puzzlez; -import hw.connect.ConnectionFactory; -import ru.m.puzzlez.proto.pack.Request; -import ru.m.puzzlez.proto.pack.Response; -import hw.connect.IConnection; -import hw.log.TraceLogger; import hw.app.App; import hw.app.Const; +import hw.log.TraceLogger; import ru.m.puzzlez.storage.GameStorage; import ru.m.puzzlez.storage.ImageStorage; import ru.m.puzzlez.storage.SettingsStorage; @@ -16,7 +12,6 @@ import ru.m.update.Updater; class PuzzlezApp { @:provide static var updater:Updater; - @:provide static var connection:IConnection; public static function main() { // ToDo: fix @:provide macro @@ -24,8 +19,6 @@ class PuzzlezApp { ImageStorage; SettingsStorage; L.push(new TraceLogger()); - connection = ConnectionFactory.buildClientConnection("127.0.0.1", 6000, Request); - connection.connect().then(_ -> L.i("connect", "success")).catchError(error -> L.e("connect", "", error)); updater = new Updater(Const.instance.VERSION, "https://shmyga.ru/repo/puzzlez/packages.json"); var app = new App(); app.theme = new PuzzlezTheme(); diff --git a/src/app/haxe/ru/m/puzzlez/net/Network.hx b/src/app/haxe/ru/m/puzzlez/net/Network.hx new file mode 100644 index 0000000..df801b7 --- /dev/null +++ b/src/app/haxe/ru/m/puzzlez/net/Network.hx @@ -0,0 +1,60 @@ +package ru.m.puzzlez.net; + +import com.hurlant.crypto.extra.UUID; +import com.hurlant.crypto.prng.Random; +import hw.connect.ConnectionFactory; +import hw.connect.IConnection; +import hw.signal.Signal; +import hw.storage.SharedObjectStorage; +import ru.m.puzzlez.proto.core.UserProto; +import ru.m.puzzlez.proto.pack.LoginRequest; +import ru.m.puzzlez.proto.pack.Request; +import ru.m.puzzlez.proto.pack.Response; + +@:provide class Network { + public var user(default, null):UserProto; + public var userSignal(default, null):Signal = new Signal(); + + private var connection:IConnection; + private var storage:SharedObjectStorage; + + private static var USER_KEY = "user"; + + public function new() { + storage = new SharedObjectStorage("netwok"); + if (storage.exists(USER_KEY)) { + user = storage.read(USER_KEY); + } else { + user = new UserProto().setName('Anonimus #${UUID.generateRandom(new Random()).toString().split("-").shift()}'); + storage.write(USER_KEY, user); + } + connection = ConnectionFactory.buildClientConnection("127.0.0.1", 6000, Response); + connection.handler.connect(onConnectionChange); + connection.receiveHandler.connect(onReceivePacket); + connection.connect(); + } + + public function login():Void { + connection.send(new Request().setLogin(new LoginRequest().setName(user.name).setUuid(user.uuid))); + } + + private function onConnectionChange(event:ConnectionEvent):Void { + L.i("network", '${event}'); + switch event { + case CONNECTED: + login(); + case DISCONNECTED: + // + case ERROR(error): + // ToDo: reconnect + } + } + + private function onReceivePacket(packet:Response):Void { + if (packet.hasLogin()) { + user = packet.login.user; + storage.write(USER_KEY, user); + userSignal.emit(user); + } + } +} diff --git a/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx b/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx index 4112850..835a8a4 100644 --- a/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx +++ b/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx @@ -2,17 +2,21 @@ package ru.m.puzzlez.view; import flash.events.KeyboardEvent; import flash.ui.Keyboard; +import hw.app.App; import hw.view.form.ButtonView; +import hw.view.form.LabelView; import hw.view.frame.FrameSwitcher; import hw.view.group.VGroupView; -import hw.app.App; +import ru.m.puzzlez.net.Network; @:template class PuzzlezAppView extends VGroupView { @:view("switcher") var switcherView:FrameSwitcher; @:view("fullscreen") var fullscreenButton:ButtonView; + @:view("user") var userLabel:LabelView; @:provide static var switcher:FrameSwitcher; + @:provide static var network:Network; @:provide static var app:App; public function new() { @@ -30,5 +34,6 @@ import hw.app.App; case _: } }); + network.userSignal.connect(user -> userLabel.text = user.name); } } diff --git a/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml b/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml index a218621..f8d9772 100644 --- a/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml +++ b/src/app/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml @@ -9,12 +9,17 @@ views: _image_list_: {$class: ru.m.puzzlez.view.ImageListFrame} _preset_: {$class: ru.m.puzzlez.view.PresetFrame} _game_: {$class: ru.m.puzzlez.view.GameFrame} - - id: fullscreen - $type: hw.view.form.ButtonView + - $type: hw.view.group.HGroupView geometry.position: absolute geometry.hAlign: right geometry.vAlign: bottom geometry.margin: 10 - style: icon.expand - +onPress: ~_ -> app.fullScreen = !app.fullScreen - visible: false + layout.vAlign: middle + views: + - id: user + $type: hw.view.form.LabelView + - id: fullscreen + $type: hw.view.form.ButtonView + style: icon.expand + +onPress: ~_ -> app.fullScreen = !app.fullScreen + visible: false diff --git a/src/server/haxe/ru/m/puzzlez/PuzzlezServer.hx b/src/server/haxe/ru/m/puzzlez/PuzzlezServer.hx index a94172a..8d9ed9d 100644 --- a/src/server/haxe/ru/m/puzzlez/PuzzlezServer.hx +++ b/src/server/haxe/ru/m/puzzlez/PuzzlezServer.hx @@ -24,16 +24,16 @@ class PuzzlezServer extends ThreadServer { override public function clientDisconnected(session:GameSession) { L.d(TAG, 'Client disconnected'); - //session.disconnect(); + session.disconnect(); } override public function readClientMessage(session:GameSession, buf:Bytes, pos:Int, len:Int): ClientMessage { - //L.d(TAG, 'Client message: ${buf}'); + L.d(TAG, 'Client message: ${buf}'); return {msg: buf.sub(pos, len), bytes: len}; } override public function clientMessage(session:GameSession, message:Message) { - //session.pushData(bytes); + session.pushData(message); } public static function main():Void {