[app] add Network
This commit is contained in:
@@ -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<Response, Request>;
|
||||
|
||||
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();
|
||||
|
||||
60
src/app/haxe/ru/m/puzzlez/net/Network.hx
Normal file
60
src/app/haxe/ru/m/puzzlez/net/Network.hx
Normal file
@@ -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<UserProto> = new Signal();
|
||||
|
||||
private var connection:IConnection<Request, Response>;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user