[client] added NetworkManager
This commit is contained in:
@@ -39,6 +39,7 @@
|
|||||||
"haxework": "git@bitbucket.org:shmyga/haxework.git",
|
"haxework": "git@bitbucket.org:shmyga/haxework.git",
|
||||||
"orm": "2.1.0",
|
"orm": "2.1.0",
|
||||||
"yield": "1.1.2",
|
"yield": "1.1.2",
|
||||||
"haxe-crypto": "0.0.7"
|
"haxe-crypto": "0.0.7",
|
||||||
|
"hxsignal": "0.9.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
<haxelib name="haxework" version="git"/>
|
<haxelib name="haxework" version="git"/>
|
||||||
<haxelib name="yaml" version="1.3.0"/>
|
<haxelib name="yaml" version="1.3.0"/>
|
||||||
<haxelib name="yield" version="1.1.2"/>
|
<haxelib name="yield" version="1.1.2"/>
|
||||||
|
<haxelib name="hxsignal" version="0.9.2"/>
|
||||||
<window fps="30"/>
|
<window fps="30"/>
|
||||||
<window width="1024" height="768" unless="html5"/>
|
<window width="1024" height="768" unless="html5"/>
|
||||||
<haxeflag name="-D" value="swf-gpu"/>
|
<haxeflag name="-D" value="swf-gpu"/>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package ru.m.tankz;
|
package ru.m.tankz;
|
||||||
|
|
||||||
|
import ru.m.tankz.network.NetworkManager;
|
||||||
import ru.m.tankz.storage.UserStorage;
|
import ru.m.tankz.storage.UserStorage;
|
||||||
import openfl.Assets;
|
import openfl.Assets;
|
||||||
import ru.m.tankz.sound.SoundManager;
|
import ru.m.tankz.sound.SoundManager;
|
||||||
@@ -93,6 +94,7 @@ class Client implements IConnectionHandler {
|
|||||||
Provider.setFactory(SaveStorage, SaveStorage);
|
Provider.setFactory(SaveStorage, SaveStorage);
|
||||||
Provider.setFactory(UserStorage, UserStorage);
|
Provider.setFactory(UserStorage, UserStorage);
|
||||||
Provider.setFactory(SoundManager, SoundManager);
|
Provider.setFactory(SoundManager, SoundManager);
|
||||||
|
Provider.setFactory(NetworkManager, NetworkManager);
|
||||||
Provider.setFactory(Game, ClassicGame, ClassicGame.TYPE);
|
Provider.setFactory(Game, ClassicGame, ClassicGame.TYPE);
|
||||||
Provider.setFactory(Game, DotaGame, DotaGame.TYPE);
|
Provider.setFactory(Game, DotaGame, DotaGame.TYPE);
|
||||||
|
|
||||||
@@ -119,6 +121,6 @@ class Client implements IConnectionHandler {
|
|||||||
|
|
||||||
public function onError(error:Dynamic):Void {
|
public function onError(error:Dynamic):Void {
|
||||||
L.e(TAG, '', error);
|
L.e(TAG, '', error);
|
||||||
view.switcher.change(StartFrame.ID);
|
//view.switcher.change(StartFrame.ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,7 @@ import haxework.gui.LabelView;
|
|||||||
import haxework.gui.VGroupView;
|
import haxework.gui.VGroupView;
|
||||||
import haxework.gui.ViewBuilder;
|
import haxework.gui.ViewBuilder;
|
||||||
import haxework.provider.Provider;
|
import haxework.provider.Provider;
|
||||||
import protohx.Message;
|
import ru.m.tankz.network.NetworkManager;
|
||||||
import ru.m.connect.IConnection;
|
|
||||||
import ru.m.tankz.proto.pack.LoginRequest;
|
|
||||||
import ru.m.tankz.proto.pack.LoginResponse;
|
|
||||||
import ru.m.tankz.storage.UserStorage;
|
|
||||||
|
|
||||||
|
|
||||||
interface NetworkFrameLayout {
|
interface NetworkFrameLayout {
|
||||||
@@ -20,15 +16,13 @@ interface NetworkFrameLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@:template("ru/m/tankz/frame/NetworkFrame.yaml", "ru/m/tankz/Style.yaml")
|
@:template("ru/m/tankz/frame/NetworkFrame.yaml", "ru/m/tankz/Style.yaml")
|
||||||
class NetworkFrame extends VGroupView implements ViewBuilder implements NetworkFrameLayout implements IPacketHandler implements IConnectionHandler {
|
class NetworkFrame extends VGroupView implements ViewBuilder implements NetworkFrameLayout {
|
||||||
public static var ID(default, never):String = "network";
|
public static var ID(default, never):String = "network";
|
||||||
|
|
||||||
private var state(null, set):String;
|
private var network(get, never):NetworkManager;
|
||||||
|
|
||||||
private function set_state(value:String):String {
|
private function get_network():NetworkManager {
|
||||||
stateLabel.text = value;
|
return Provider.get(NetworkManager);
|
||||||
loginButton.disabled = value != 'online';
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function init():Void {
|
public function init():Void {
|
||||||
@@ -36,53 +30,21 @@ class NetworkFrame extends VGroupView implements ViewBuilder implements NetworkF
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function onShow():Void {
|
public function onShow():Void {
|
||||||
var user:User = Provider.get(UserStorage).read();
|
nameInput.text = network.user.name;
|
||||||
nameInput.text = user.name;
|
onStateChange(network.state);
|
||||||
var connection:IConnection = Provider.get(IConnection);
|
network.stateSignal.connect(onStateChange);
|
||||||
connection.packetHandler.addListener(this);
|
|
||||||
connection.handler.addListener(this);
|
|
||||||
state = connection.connected ? 'online' : 'offline';
|
|
||||||
if (!connection.connected) {
|
|
||||||
connection.connect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function onStateChange(state:String):Void {
|
||||||
|
loginButton.disabled = !(state == "offline" || state == "error");
|
||||||
|
stateLabel.text = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onHide():Void {
|
public function onHide():Void {
|
||||||
Provider.get(IConnection).packetHandler.removeListener(this);
|
network.stateSignal.disconnect(onStateChange);
|
||||||
Provider.get(IConnection).handler.removeListener(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onPress(view:ButtonView):Void {
|
public function onPress(view:ButtonView):Void {
|
||||||
var user:User = Provider.get(UserStorage).read();
|
network.login(nameInput.text);
|
||||||
user.name = nameInput.text;
|
|
||||||
Provider.get(IConnection).send(
|
|
||||||
new LoginRequest()
|
|
||||||
.setUuid(user.uuid)
|
|
||||||
.setName(user.name)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onLoginResponse(packet:LoginResponse):Void {
|
|
||||||
var user:User = {
|
|
||||||
uuid: packet.user.uuid,
|
|
||||||
name: packet.user.name,
|
|
||||||
};
|
|
||||||
Provider.get(UserStorage).write(user);
|
|
||||||
//Provider.set(User, user);
|
|
||||||
state = 'logined';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onPacket(packet:Message):Void {}
|
|
||||||
|
|
||||||
public function onConnected():Void {
|
|
||||||
state = 'online';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onDisconnected():Void {
|
|
||||||
state = 'offline';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onError(error:Dynamic):Void {
|
|
||||||
state = 'offline';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
82
src/client/haxe/ru/m/tankz/network/NetworkManager.hx
Normal file
82
src/client/haxe/ru/m/tankz/network/NetworkManager.hx
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
package ru.m.tankz.network;
|
||||||
|
|
||||||
|
import haxework.provider.Provider;
|
||||||
|
import hxsignal.impl.Signal1;
|
||||||
|
import protohx.Message;
|
||||||
|
import ru.m.connect.IConnection;
|
||||||
|
import ru.m.tankz.proto.pack.LoginRequest;
|
||||||
|
import ru.m.tankz.proto.pack.LoginResponse;
|
||||||
|
import ru.m.tankz.storage.UserStorage;
|
||||||
|
|
||||||
|
|
||||||
|
class NetworkManager implements IPacketHandler implements IConnectionHandler {
|
||||||
|
|
||||||
|
public var state(default, null):String;
|
||||||
|
public var stateSignal:Signal1<String>;
|
||||||
|
public var user(default, null):User;
|
||||||
|
|
||||||
|
private var connection(get, never):IConnection;
|
||||||
|
private var storage(get, never):UserStorage;
|
||||||
|
|
||||||
|
inline private function get_connection():IConnection {
|
||||||
|
return Provider.get(IConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline private function get_storage():UserStorage {
|
||||||
|
return Provider.get(UserStorage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function new() {
|
||||||
|
stateSignal = new Signal1<String>();
|
||||||
|
updateState('offline');
|
||||||
|
connection.handler.addListener(this);
|
||||||
|
connection.packetHandler.addListener(this);
|
||||||
|
user = storage.read();
|
||||||
|
if (user == null) {
|
||||||
|
user = {name: 'User', uuid: null};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function updateState(value:String):Void {
|
||||||
|
state = value;
|
||||||
|
stateSignal.emit(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function login(name:String):Void {
|
||||||
|
user.name = name;
|
||||||
|
if (!connection.connected) {
|
||||||
|
updateState('connect...');
|
||||||
|
connection.connect();
|
||||||
|
} else {
|
||||||
|
onConnected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onConnected():Void {
|
||||||
|
updateState('login...');
|
||||||
|
connection.send(
|
||||||
|
new LoginRequest()
|
||||||
|
.setUuid(user.uuid)
|
||||||
|
.setName(user.name)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onDisconnected():Void {
|
||||||
|
updateState('offline');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onError(error:Dynamic):Void {
|
||||||
|
updateState('error');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onLoginResponse(packet:LoginResponse):Void {
|
||||||
|
user = {
|
||||||
|
uuid: packet.user.uuid,
|
||||||
|
name: packet.user.name,
|
||||||
|
};
|
||||||
|
storage.write(user);
|
||||||
|
updateState('online');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onPacket(packet:Message):Void {}
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@ class UserStorage {
|
|||||||
public function read():Null<User> {
|
public function read():Null<User> {
|
||||||
var user:User = Reflect.getProperty(so.data, 'user');
|
var user:User = Reflect.getProperty(so.data, 'user');
|
||||||
L.d(TAG, 'read: ${user}');
|
L.d(TAG, 'read: ${user}');
|
||||||
return user != null ? user : {name: 'User', uuid: null};
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function write(user:User):Void {
|
public function write(user:User):Void {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package ru.m.connect;
|
package ru.m.connect;
|
||||||
|
|
||||||
|
import promhx.Promise;
|
||||||
import haxework.dispath.IDispatcher;
|
import haxework.dispath.IDispatcher;
|
||||||
import haxe.io.Bytes;
|
import haxe.io.Bytes;
|
||||||
import protohx.Message;
|
import protohx.Message;
|
||||||
|
|||||||
Reference in New Issue
Block a user