[proto] added GameRequest and GameResponse
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package ru.m.tankz.frame;
|
package ru.m.tankz.frame;
|
||||||
|
|
||||||
|
import ru.m.tankz.network.NetworkManager;
|
||||||
|
import ru.m.tankz.network.NetworkGame;
|
||||||
import flash.events.Event;
|
import flash.events.Event;
|
||||||
import haxe.ds.Option;
|
import haxe.ds.Option;
|
||||||
import haxe.Timer;
|
import haxe.Timer;
|
||||||
@@ -24,6 +26,7 @@ class GameFrame extends VGroupView {
|
|||||||
|
|
||||||
@:view var state(default, null):LabelView;
|
@:view var state(default, null):LabelView;
|
||||||
@:view var render(default, null):Render;
|
@:view var render(default, null):Render;
|
||||||
|
@:provide var network:NetworkManager;
|
||||||
|
|
||||||
private var game:Game;
|
private var game:Game;
|
||||||
private var timer:Timer;
|
private var timer:Timer;
|
||||||
@@ -35,17 +38,20 @@ class GameFrame extends VGroupView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function start(save:GameSave):Void {
|
private function start(save:GameSave):Void {
|
||||||
|
switch (save.server) {
|
||||||
|
case GameServer.LOCAL:
|
||||||
game = new Game(save.state.type);
|
game = new Game(save.state.type);
|
||||||
if (game == null) {
|
game.start(save).then(onGameStateChange).endThen(onGameComplete);
|
||||||
throw 'Unsupported game type "${save.state.type}"';
|
timer = new Timer(10);
|
||||||
|
timer.run = updateEngine;
|
||||||
|
case GameServer.NETWORK:
|
||||||
|
game = new NetworkGame(save.state.type);
|
||||||
|
network.game = cast game;
|
||||||
}
|
}
|
||||||
game.engine.connect(render);
|
game.engine.connect(render);
|
||||||
game.engine.connect(Provider.get(SoundManager));
|
game.engine.connect(Provider.get(SoundManager));
|
||||||
game.start(save).then(onGameStateChange).endThen(onGameComplete);
|
|
||||||
content.addEventListener(Event.ENTER_FRAME, redraw);
|
content.addEventListener(Event.ENTER_FRAME, redraw);
|
||||||
render.draw(game.engine);
|
render.draw(game.engine);
|
||||||
timer = new Timer(10);
|
|
||||||
timer.run = updateEngine;
|
|
||||||
state.text = stateString(game);
|
state.text = stateString(game);
|
||||||
Provider.get(SoundManager).play('start');
|
Provider.get(SoundManager).play('start');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class NetworkFrame extends VGroupView {
|
|||||||
userList.data = game.players;
|
userList.data = game.players;
|
||||||
frameSwitcher.change(gameFrame.id);
|
frameSwitcher.change(gameFrame.id);
|
||||||
if (game.state == GameStateProto.STARTED) {
|
if (game.state == GameStateProto.STARTED) {
|
||||||
Provider.set(GameSave, new GameSave({type: ClassicGame.TYPE, presetId: ClassicGame.PLAYER1}));
|
Provider.set(GameSave, new GameSave({type: ClassicGame.TYPE, presetId: ClassicGame.PLAYER1}, null, GameServer.NETWORK));
|
||||||
mainFrameSwitcher.change(GameFrame.ID);
|
mainFrameSwitcher.change(GameFrame.ID);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package ru.m.tankz.network;
|
package ru.m.tankz.network;
|
||||||
|
|
||||||
|
import ru.m.tankz.proto.pack.GameRequest;
|
||||||
|
import ru.m.tankz.proto.core.GameProto;
|
||||||
import ru.m.tankz.proto.pack.StartGameRequest;
|
import ru.m.tankz.proto.pack.StartGameRequest;
|
||||||
import ru.m.tankz.proto.game.GameChangeProto;
|
import ru.m.tankz.proto.game.GameChangeProto;
|
||||||
import ru.m.tankz.proto.game.GameActionTypeProto;
|
import ru.m.tankz.proto.game.GameActionTypeProto;
|
||||||
@@ -28,6 +30,7 @@ class NetworkManager {
|
|||||||
public var gameSignal:Signal<GameInfoProto>;
|
public var gameSignal:Signal<GameInfoProto>;
|
||||||
public var gameUpdateSignal:Signal<Array<GameChangeProto>>;
|
public var gameUpdateSignal:Signal<Array<GameChangeProto>>;
|
||||||
public var user(default, null):User;
|
public var user(default, null):User;
|
||||||
|
public var game(default, set):NetworkGame;
|
||||||
|
|
||||||
@:provide private var connection:ClientConnection;
|
@:provide private var connection:ClientConnection;
|
||||||
@:provide private var storage:UserStorage;
|
@:provide private var storage:UserStorage;
|
||||||
@@ -113,7 +116,7 @@ class NetworkManager {
|
|||||||
L.d('Network', '$event');
|
L.d('Network', '$event');
|
||||||
'offline';
|
'offline';
|
||||||
case ConnectionEvent.ERROR(error):
|
case ConnectionEvent.ERROR(error):
|
||||||
L.e('Network', '$error');
|
L.e('Network', '$error', error);
|
||||||
'error';
|
'error';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -141,6 +144,14 @@ class NetworkManager {
|
|||||||
gameSignal.emit(packet.startGame.game);
|
gameSignal.emit(packet.startGame.game);
|
||||||
} else if (packet.hasUpdateGame()) {
|
} else if (packet.hasUpdateGame()) {
|
||||||
gameUpdateSignal.emit(packet.updateGame.changes);
|
gameUpdateSignal.emit(packet.updateGame.changes);
|
||||||
|
} else if (packet.hasGame()) {
|
||||||
|
game.load(packet.game.game);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function set_game(value:NetworkGame):NetworkGame {
|
||||||
|
this.game = value;
|
||||||
|
connection.send(new Request().setGame(new GameRequest()));
|
||||||
|
return this.game;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,18 +12,25 @@ typedef PlayerSave = {
|
|||||||
var state:PlayerState;
|
var state:PlayerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum GameServer {
|
||||||
|
LOCAL;
|
||||||
|
NETWORK;
|
||||||
|
}
|
||||||
|
|
||||||
class GameSave {
|
class GameSave {
|
||||||
|
|
||||||
public var state:GameState;
|
public var state:GameState;
|
||||||
public var players:Array<PlayerSave>;
|
public var players:Array<PlayerSave>;
|
||||||
|
public var server:GameServer;
|
||||||
|
|
||||||
public function new(state:GameState, ?players:Array<PlayerSave>) {
|
public function new(state:GameState, ?players:Array<PlayerSave>, ?server:GameServer) {
|
||||||
this.state = {
|
this.state = {
|
||||||
type: state.type,
|
type: state.type,
|
||||||
presetId: state.presetId,
|
presetId: state.presetId,
|
||||||
level: state.level,
|
level: state.level,
|
||||||
};
|
};
|
||||||
this.players = players != null ? players : [];
|
this.players = players != null ? players : [];
|
||||||
|
this.server = server != null ? server : GameServer.LOCAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addPlayerState(id:PlayerId, state:PlayerState):Void {
|
public function addPlayerState(id:PlayerId, state:PlayerState):Void {
|
||||||
|
|||||||
@@ -8,11 +8,14 @@ import ru.m.tankz.game.Game;
|
|||||||
|
|
||||||
class NetworkGame extends Game {
|
class NetworkGame extends Game {
|
||||||
|
|
||||||
|
private static var TAG(default, never):String = 'NetworkGame';
|
||||||
|
|
||||||
public function new(type:GameType) {
|
public function new(type:GameType) {
|
||||||
super(type);
|
super(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function load(proto:GameProto):Void {
|
public function load(proto:GameProto):Void {
|
||||||
|
L.w(TAG, 'load: ${proto}');
|
||||||
// ToDo:
|
// ToDo:
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,6 +24,6 @@ class NetworkGame extends Game {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function export():GameProto {
|
public function export():GameProto {
|
||||||
return null;
|
return new GameProto();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,13 @@ message StartGameResponse {
|
|||||||
ru.m.tankz.proto.core.GameInfoProto game = 1;
|
ru.m.tankz.proto.core.GameInfoProto game = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Game
|
||||||
|
message GameRequest {}
|
||||||
|
|
||||||
|
message GameResponse {
|
||||||
|
ru.m.tankz.proto.core.GameProto game = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Game Update
|
// Game Update
|
||||||
message GameUpdateRequest {
|
message GameUpdateRequest {
|
||||||
ru.m.tankz.proto.game.GameActionTypeProto type = 1;
|
ru.m.tankz.proto.game.GameActionTypeProto type = 1;
|
||||||
@@ -86,7 +93,8 @@ message Request {
|
|||||||
JoinGameRequest joinGame = 5;
|
JoinGameRequest joinGame = 5;
|
||||||
LeaveGameRequest leaveGame = 6;
|
LeaveGameRequest leaveGame = 6;
|
||||||
StartGameRequest startGame = 7;
|
StartGameRequest startGame = 7;
|
||||||
GameUpdateRequest updateGame = 8;
|
GameRequest game = 8;
|
||||||
|
GameUpdateRequest updateGame = 9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,6 +108,7 @@ message Response {
|
|||||||
JoinGameResponse joinGame = 5;
|
JoinGameResponse joinGame = 5;
|
||||||
LeaveGameResponse leaveGame = 6;
|
LeaveGameResponse leaveGame = 6;
|
||||||
StartGameResponse startGame = 7;
|
StartGameResponse startGame = 7;
|
||||||
GameUpdateResponse updateGame = 8;
|
GameResponse game = 8;
|
||||||
|
GameUpdateResponse updateGame = 9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package ru.m.tankz.server.game;
|
package ru.m.tankz.server.game;
|
||||||
|
|
||||||
|
import ru.m.tankz.network.NetworkGame;
|
||||||
import ru.m.tankz.preset.ClassicGame;
|
import ru.m.tankz.preset.ClassicGame;
|
||||||
import ru.m.tankz.game.GameSave;
|
import ru.m.tankz.game.GameSave;
|
||||||
import ru.m.tankz.proto.pack.StartGameResponse;
|
import ru.m.tankz.proto.pack.StartGameResponse;
|
||||||
@@ -8,7 +9,6 @@ import ru.m.tankz.proto.pack.JoinGameResponse;
|
|||||||
import ru.m.tankz.proto.pack.ListGameResponse;
|
import ru.m.tankz.proto.pack.ListGameResponse;
|
||||||
import ru.m.tankz.proto.pack.CreateGameResponse;
|
import ru.m.tankz.proto.pack.CreateGameResponse;
|
||||||
import ru.m.tankz.proto.pack.Response;
|
import ru.m.tankz.proto.pack.Response;
|
||||||
import ru.m.tankz.game.Game;
|
|
||||||
import ru.m.tankz.proto.core.GameStateProto;
|
import ru.m.tankz.proto.core.GameStateProto;
|
||||||
import ru.m.tankz.proto.core.GameInfoProto;
|
import ru.m.tankz.proto.core.GameInfoProto;
|
||||||
import ru.m.tankz.proto.core.UserProto;
|
import ru.m.tankz.proto.core.UserProto;
|
||||||
@@ -58,7 +58,7 @@ class GameManager {
|
|||||||
private static var idCounter:Int = 0;
|
private static var idCounter:Int = 0;
|
||||||
|
|
||||||
public var gameInfo(default, null):GameInfoProto;
|
public var gameInfo(default, null):GameInfoProto;
|
||||||
public var game(default, null):Game;
|
public var game(default, null):NetworkGame;
|
||||||
|
|
||||||
private var timer:NekoTimer;
|
private var timer:NekoTimer;
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ class GameManager {
|
|||||||
|
|
||||||
public function start() {
|
public function start() {
|
||||||
gameInfo.setState(GameStateProto.STARTED);
|
gameInfo.setState(GameStateProto.STARTED);
|
||||||
game = new Game(ClassicGame.TYPE);
|
game = new NetworkGame(ClassicGame.TYPE);
|
||||||
game.start(new GameSave({type: ClassicGame.TYPE, presetId: ClassicGame.PLAYER1, level: 0}));
|
game.start(new GameSave({type: ClassicGame.TYPE, presetId: ClassicGame.PLAYER1, level: 0}));
|
||||||
timer = new NekoTimer(30);
|
timer = new NekoTimer(30);
|
||||||
timer.run = update;
|
timer.run = update;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package ru.m.tankz.server.session;
|
package ru.m.tankz.server.session;
|
||||||
|
|
||||||
|
import ru.m.tankz.proto.pack.GameResponse;
|
||||||
|
import ru.m.tankz.proto.pack.GameRequest;
|
||||||
import com.hurlant.crypto.extra.UUID;
|
import com.hurlant.crypto.extra.UUID;
|
||||||
import com.hurlant.crypto.prng.Random;
|
import com.hurlant.crypto.prng.Random;
|
||||||
import haxe.io.Bytes;
|
import haxe.io.Bytes;
|
||||||
@@ -99,6 +101,8 @@ class Session {
|
|||||||
send(new Response().setLeaveGame(leaveGame(request.leaveGame)));
|
send(new Response().setLeaveGame(leaveGame(request.leaveGame)));
|
||||||
} else if (request.hasStartGame()) {
|
} else if (request.hasStartGame()) {
|
||||||
send(new Response().setStartGame(startGame(request.startGame)));
|
send(new Response().setStartGame(startGame(request.startGame)));
|
||||||
|
}else if (request.hasGame()) {
|
||||||
|
send(new Response().setGame(game(request.game)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,4 +147,9 @@ class Session {
|
|||||||
gameManager.start();
|
gameManager.start();
|
||||||
return new StartGameResponse().setGame(gameManager.gameInfo);
|
return new StartGameResponse().setGame(gameManager.gameInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function game(request:GameRequest):GameResponse {
|
||||||
|
var gameManager:GameManager = GameManager.byPersonId.get(user.uuid);
|
||||||
|
return new GameResponse().setGame(gameManager.game.export());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user