[proto] update
This commit is contained in:
@@ -1,20 +1,24 @@
|
||||
package ru.m.puzzlez.net;
|
||||
|
||||
import haxe.Unserializer;
|
||||
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 promhx.Promise;
|
||||
import ru.m.data.IDataSource;
|
||||
import ru.m.puzzlez.core.GameEvent;
|
||||
import ru.m.puzzlez.core.GameState;
|
||||
import ru.m.puzzlez.core.Id;
|
||||
import ru.m.puzzlez.proto.core.GameProto;
|
||||
import ru.m.puzzlez.proto.core.UserProto;
|
||||
import ru.m.puzzlez.proto.pack.GameCreateRequest;
|
||||
import ru.m.puzzlez.proto.pack.GameJoinRequest;
|
||||
import ru.m.puzzlez.proto.pack.LoginRequest;
|
||||
import ru.m.puzzlez.proto.pack.Request;
|
||||
import ru.m.puzzlez.proto.pack.Response;
|
||||
|
||||
@:provide class Network {
|
||||
@:provide class Network implements IDataIndex<ImageId> {
|
||||
public var user(default, null):UserProto;
|
||||
public var userSignal(default, null):Signal<UserProto> = new Signal();
|
||||
|
||||
@@ -33,11 +37,11 @@ import ru.m.puzzlez.proto.pack.Response;
|
||||
|
||||
public function new() {
|
||||
gameList = [];
|
||||
storage = new SharedObjectStorage("netwok");
|
||||
storage = new SharedObjectStorage("network");
|
||||
if (storage.exists(USER_KEY)) {
|
||||
user = storage.read(USER_KEY);
|
||||
} else {
|
||||
user = new UserProto().setName('Anonimus #${UUID.generateRandom(new Random()).toString().split("-").shift()}');
|
||||
user = new UserProto().setName('Anonimus #${IdUtil.generate()}');
|
||||
storage.write(USER_KEY, user);
|
||||
}
|
||||
connection = ConnectionFactory.buildClientConnection("127.0.0.1", 5000, Response);
|
||||
@@ -50,6 +54,14 @@ import ru.m.puzzlez.proto.pack.Response;
|
||||
connection.send(new Request().setLogin(new LoginRequest().setUser(user)));
|
||||
}
|
||||
|
||||
public function startGame(state:GameState):Void {
|
||||
connection.send(new Request().setGameCreate(new GameCreateRequest().setImageId(state.preset.imageId)));
|
||||
}
|
||||
|
||||
public function joinGame(state:GameState):Void {
|
||||
connection.send(new Request().setGameJoin(new GameJoinRequest().setGameId(state.id)));
|
||||
}
|
||||
|
||||
private function onConnectionChange(event:ConnectionEvent):Void {
|
||||
L.i("network", '${event}');
|
||||
switch event {
|
||||
@@ -82,4 +94,14 @@ import ru.m.puzzlez.proto.pack.Response;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getIndexPage(page:Page):Promise<DataPage<ImageId>> {
|
||||
// ToDo: return gameList
|
||||
var data = {
|
||||
page: page,
|
||||
total: 1,
|
||||
data: [new ImageId('asset', 'resources/image/raccoon.jpg')],
|
||||
}
|
||||
return Promise.promise(data);
|
||||
}
|
||||
}
|
||||
|
||||
41
src/app/haxe/ru/m/puzzlez/net/NetworkGame.hx
Normal file
41
src/app/haxe/ru/m/puzzlez/net/NetworkGame.hx
Normal file
@@ -0,0 +1,41 @@
|
||||
package ru.m.puzzlez.net;
|
||||
|
||||
import hw.signal.Signal;
|
||||
import ru.m.puzzlez.core.GameState;
|
||||
import ru.m.puzzlez.core.GameEvent;
|
||||
import ru.m.puzzlez.core.IGame;
|
||||
|
||||
class NetworkGame implements IGame {
|
||||
public var state(default, null):GameState;
|
||||
public var signal(default, null):Signal<GameEvent>;
|
||||
|
||||
@:provide private var network:Network;
|
||||
|
||||
public function new(state:GameState) {
|
||||
this.state = state;
|
||||
signal = new Signal();
|
||||
}
|
||||
|
||||
private function onEvent(event:GameEvent):Void {
|
||||
signal.emit(event);
|
||||
}
|
||||
|
||||
public function start():Void {
|
||||
network.gameEventSignal.connect(onEvent);
|
||||
switch state.status {
|
||||
case READY:
|
||||
network.startGame(state);
|
||||
case _:
|
||||
network.joinGame(state);
|
||||
}
|
||||
}
|
||||
|
||||
public function stop():Void {
|
||||
network.gameEventSignal.disconnect(onEvent);
|
||||
}
|
||||
|
||||
public function dispose():Void {
|
||||
stop();
|
||||
signal.dispose();
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import ru.m.puzzlez.core.Game;
|
||||
import ru.m.puzzlez.core.GameEvent;
|
||||
import ru.m.puzzlez.core.GameState;
|
||||
import ru.m.puzzlez.core.IGame;
|
||||
import ru.m.puzzlez.net.NetworkGame;
|
||||
import ru.m.puzzlez.render.IRender;
|
||||
import ru.m.puzzlez.storage.GameStorage;
|
||||
import ru.m.puzzlez.storage.SettingsStorage;
|
||||
@@ -32,7 +33,11 @@ import ru.m.puzzlez.view.popup.PreviewPopup;
|
||||
|
||||
override public function onShow(state:GameState):Void {
|
||||
onHide();
|
||||
game = new Game(state);
|
||||
if (state.online) {
|
||||
game = new NetworkGame(state);
|
||||
} else {
|
||||
game = new Game(state);
|
||||
}
|
||||
game.signal.connect(render.onGameEvent);
|
||||
game.signal.connect(onGameEvent);
|
||||
render.signal.connect(game.signal.emit);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.m.puzzlez.view;
|
||||
|
||||
import ru.m.puzzlez.net.Network;
|
||||
import hw.geom.IntPoint;
|
||||
import hw.view.data.DataView;
|
||||
import hw.view.form.ToggleButtonView;
|
||||
@@ -18,6 +19,7 @@ import ru.m.puzzlez.view.common.PresetView;
|
||||
|
||||
@:provide var imageStorage:ImageStorage;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var network:Network;
|
||||
|
||||
private var imageId:ImageId;
|
||||
|
||||
@@ -53,7 +55,8 @@ import ru.m.puzzlez.view.common.PresetView;
|
||||
selectSize(sizesView.data[sizesView.data.length - 1]);
|
||||
}
|
||||
|
||||
private function start():Void {
|
||||
private function start(online:Bool = false):Void {
|
||||
imageView.state.online = online;
|
||||
switcher.change(GameFrame.ID, imageView.state);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,11 @@ views:
|
||||
geometry.margin.left: 15
|
||||
text: Start
|
||||
+onPress: ~start()
|
||||
- $type: hw.view.form.ButtonView
|
||||
style: button.active
|
||||
geometry.margin.left: 15
|
||||
text: Network
|
||||
+onPress: ~start(true)
|
||||
- id: image
|
||||
$type: ru.m.puzzlez.view.common.PresetView
|
||||
geometry.stretch: true
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.m.puzzlez.view;
|
||||
|
||||
import ru.m.puzzlez.net.Network;
|
||||
import hw.view.data.DataView;
|
||||
import hw.view.form.ButtonView;
|
||||
import hw.view.frame.FrameSwitcher;
|
||||
@@ -26,6 +27,7 @@ import ru.m.update.Updater;
|
||||
@:provide var storage:ImageStorage;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var gameStorage:GameStorage;
|
||||
@:provide var network:Network;
|
||||
@:provide static var appUpdater:Updater;
|
||||
|
||||
public function new() {
|
||||
@@ -75,7 +77,11 @@ import ru.m.update.Updater;
|
||||
switcher.change(ImageListFrame.ID, source);
|
||||
}
|
||||
|
||||
private function games(status:GameStatus):Void {
|
||||
private function openGames(status:GameStatus):Void {
|
||||
switcher.change(ImageListFrame.ID, gameStorage.statusSource(status));
|
||||
}
|
||||
|
||||
private function openNetwork():Void {
|
||||
switcher.change(ImageListFrame.ID, {title: 'Network', source: network});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,11 +35,15 @@ views:
|
||||
- id: load
|
||||
$type: hw.view.form.ButtonView
|
||||
text: Load
|
||||
+onPress: ~games('started')
|
||||
+onPress: ~openGames('started')
|
||||
- id: complete
|
||||
$type: hw.view.form.ButtonView
|
||||
text: Complete
|
||||
+onPress: ~games('complete')
|
||||
+onPress: ~openGames('complete')
|
||||
- id: network
|
||||
$type: hw.view.form.ButtonView
|
||||
text: Network
|
||||
+onPress: ~openNetwork()
|
||||
- $type: hw.view.SpriteView
|
||||
geometry.width: 100%
|
||||
- $type: hw.view.form.LabelView
|
||||
|
||||
Reference in New Issue
Block a user