[proto] update
This commit is contained in:
@@ -2,8 +2,6 @@
|
|||||||
"protoPath": "src/common/proto",
|
"protoPath": "src/common/proto",
|
||||||
"protoFiles": [
|
"protoFiles": [
|
||||||
"src/common/proto/core.proto",
|
"src/common/proto/core.proto",
|
||||||
"src/common/proto/game.proto",
|
|
||||||
"src/common/proto/room.proto",
|
|
||||||
"src/common/proto/pack.proto"
|
"src/common/proto/pack.proto"
|
||||||
],
|
],
|
||||||
"cleanOut": true,
|
"cleanOut": true,
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package ru.m.puzzlez.net;
|
package ru.m.puzzlez.net;
|
||||||
|
|
||||||
|
import haxe.Unserializer;
|
||||||
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 hw.connect.ConnectionFactory;
|
import hw.connect.ConnectionFactory;
|
||||||
import hw.connect.IConnection;
|
import hw.connect.IConnection;
|
||||||
import hw.signal.Signal;
|
import hw.signal.Signal;
|
||||||
import hw.storage.SharedObjectStorage;
|
import hw.storage.SharedObjectStorage;
|
||||||
|
import ru.m.puzzlez.core.GameEvent;
|
||||||
|
import ru.m.puzzlez.proto.core.GameProto;
|
||||||
import ru.m.puzzlez.proto.core.UserProto;
|
import ru.m.puzzlez.proto.core.UserProto;
|
||||||
import ru.m.puzzlez.proto.pack.LoginRequest;
|
import ru.m.puzzlez.proto.pack.LoginRequest;
|
||||||
import ru.m.puzzlez.proto.pack.Request;
|
import ru.m.puzzlez.proto.pack.Request;
|
||||||
@@ -15,12 +18,21 @@ import ru.m.puzzlez.proto.pack.Response;
|
|||||||
public var user(default, null):UserProto;
|
public var user(default, null):UserProto;
|
||||||
public var userSignal(default, null):Signal<UserProto> = new Signal();
|
public var userSignal(default, null):Signal<UserProto> = new Signal();
|
||||||
|
|
||||||
|
public var gameList(default, null):Array<GameProto>;
|
||||||
|
public var gameListSignal(default, null):Signal<Array<GameProto>> = new Signal();
|
||||||
|
|
||||||
|
public var game(default, null):GameProto;
|
||||||
|
public var gameSignal(default, null):Signal<GameProto> = new Signal();
|
||||||
|
|
||||||
|
public var gameEventSignal(default, null):Signal<GameEvent> = new Signal();
|
||||||
|
|
||||||
private var connection:IConnection<Request, Response>;
|
private var connection:IConnection<Request, Response>;
|
||||||
private var storage:SharedObjectStorage;
|
private var storage:SharedObjectStorage;
|
||||||
|
|
||||||
private static var USER_KEY = "user";
|
private static var USER_KEY = "user";
|
||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
|
gameList = [];
|
||||||
storage = new SharedObjectStorage("netwok");
|
storage = new SharedObjectStorage("netwok");
|
||||||
if (storage.exists(USER_KEY)) {
|
if (storage.exists(USER_KEY)) {
|
||||||
user = storage.read(USER_KEY);
|
user = storage.read(USER_KEY);
|
||||||
@@ -35,7 +47,7 @@ import ru.m.puzzlez.proto.pack.Response;
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function login():Void {
|
public function login():Void {
|
||||||
connection.send(new Request().setLogin(new LoginRequest().setName(user.name).setUuid(user.uuid)));
|
connection.send(new Request().setLogin(new LoginRequest().setUser(user)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function onConnectionChange(event:ConnectionEvent):Void {
|
private function onConnectionChange(event:ConnectionEvent):Void {
|
||||||
@@ -55,6 +67,19 @@ import ru.m.puzzlez.proto.pack.Response;
|
|||||||
user = packet.login.user;
|
user = packet.login.user;
|
||||||
storage.write(USER_KEY, user);
|
storage.write(USER_KEY, user);
|
||||||
userSignal.emit(user);
|
userSignal.emit(user);
|
||||||
|
} else if (packet.hasLogout()) {
|
||||||
|
user = null;
|
||||||
|
userSignal.emit(user);
|
||||||
|
} else if (packet.hasGameList()) {
|
||||||
|
gameList = packet.gameList.games;
|
||||||
|
gameListSignal.emit(gameList);
|
||||||
|
} else if (packet.hasGame()) {
|
||||||
|
game = packet.game.game;
|
||||||
|
gameSignal.emit(game);
|
||||||
|
} else if (packet.hasGameEvent()) {
|
||||||
|
for (event in packet.gameEvent.events) {
|
||||||
|
gameEventSignal.emit(Unserializer.run(event.event));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,12 @@ message UserProto {
|
|||||||
|
|
||||||
message GameProto {
|
message GameProto {
|
||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
|
string imageId = 2;
|
||||||
|
string status = 3;
|
||||||
|
repeated UserProto users = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GameEventProto {
|
||||||
|
int32 time = 1;
|
||||||
|
string event = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package ru.m.puzzlez.proto.game;
|
|
||||||
|
|
||||||
message GameEventProto {
|
|
||||||
int32 time = 1;
|
|
||||||
string event = 2;
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
import "core.proto";
|
import "core.proto";
|
||||||
import "game.proto";
|
|
||||||
import "room.proto";
|
|
||||||
|
|
||||||
package ru.m.puzzlez.proto.pack;
|
package ru.m.puzzlez.proto.pack;
|
||||||
|
|
||||||
@@ -12,8 +10,7 @@ message ErrorResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message LoginRequest {
|
message LoginRequest {
|
||||||
string uuid = 1;
|
ru.m.puzzlez.proto.core.UserProto user = 1;
|
||||||
string name = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message LoginResponse {
|
message LoginResponse {
|
||||||
@@ -24,21 +21,48 @@ message LogoutRequest {}
|
|||||||
|
|
||||||
message LogoutResponse {}
|
message LogoutResponse {}
|
||||||
|
|
||||||
|
message GameCreateRequest {
|
||||||
|
string imageId = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GameJoinRequest {
|
||||||
|
int32 gameId = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GameLeaveRequest {}
|
||||||
|
|
||||||
|
message GameResponse {
|
||||||
|
ru.m.puzzlez.proto.core.GameProto game = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GameListRequest {
|
||||||
|
bool subscribe = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GameListResponse {
|
||||||
|
repeated ru.m.puzzlez.proto.core.GameProto games = 1;
|
||||||
|
}
|
||||||
|
|
||||||
message GameEventRequest {
|
message GameEventRequest {
|
||||||
ru.m.puzzlez.proto.game.GameEventProto event = 1;
|
repeated ru.m.puzzlez.proto.core.GameEventProto events = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GameEventResponse {
|
message GameEventResponse {
|
||||||
ru.m.puzzlez.proto.game.GameEventProto event = 1;
|
repeated ru.m.puzzlez.proto.core.GameEventProto events = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Request {
|
message Request {
|
||||||
oneof content {
|
oneof content {
|
||||||
LoginRequest login = 1;
|
LoginRequest login = 1;
|
||||||
LogoutRequest logout = 2;
|
LogoutRequest logout = 2;
|
||||||
ru.m.puzzlez.proto.room.RoomRequest room = 3;
|
|
||||||
ru.m.puzzlez.proto.room.RoomListRequest roomList = 4;
|
GameCreateRequest gameCreate = 10;
|
||||||
GameEventRequest gameEvent = 6;
|
GameLeaveRequest gameJoin = 11;
|
||||||
|
GameLeaveRequest gameLeave = 12;
|
||||||
|
|
||||||
|
GameListRequest gameList = 20;
|
||||||
|
|
||||||
|
GameEventRequest gameEvent = 100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,9 +70,12 @@ message Response {
|
|||||||
oneof content {
|
oneof content {
|
||||||
LoginResponse login = 1;
|
LoginResponse login = 1;
|
||||||
LogoutResponse logout = 2;
|
LogoutResponse logout = 2;
|
||||||
ru.m.puzzlez.proto.room.RoomResponse room = 3;
|
|
||||||
ru.m.puzzlez.proto.room.RoomListResponse roomList = 4;
|
GameResponse game = 10;
|
||||||
GameEventResponse gameEvent = 6;
|
|
||||||
|
GameListResponse gameList = 20;
|
||||||
|
|
||||||
|
GameEventResponse gameEvent = 100;
|
||||||
|
|
||||||
ErrorResponse error = 999;
|
ErrorResponse error = 999;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
import "core.proto";
|
|
||||||
|
|
||||||
package ru.m.puzzlez.proto.room;
|
|
||||||
|
|
||||||
message SlotProto {
|
|
||||||
string team = 3;
|
|
||||||
int32 index = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RoomSlotProto {
|
|
||||||
SlotProto slot = 1;
|
|
||||||
ru.m.puzzlez.proto.core.UserProto user = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RoomProto {
|
|
||||||
ru.m.puzzlez.proto.core.GameProto game = 1;
|
|
||||||
ru.m.puzzlez.proto.core.UserProto creator = 2;
|
|
||||||
repeated ru.m.puzzlez.proto.core.UserProto users = 3;
|
|
||||||
repeated RoomSlotProto slots = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message CreateRequest {
|
|
||||||
string type = 2;
|
|
||||||
int32 level = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message JoinRequest {
|
|
||||||
int32 gameId = 1;
|
|
||||||
bool restore = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message LeaveRequest {
|
|
||||||
}
|
|
||||||
|
|
||||||
message SlotRequest {
|
|
||||||
SlotProto slot = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message StartRequest {
|
|
||||||
}
|
|
||||||
|
|
||||||
message RoomRequest {
|
|
||||||
oneof content {
|
|
||||||
CreateRequest create = 1;
|
|
||||||
JoinRequest join = 2;
|
|
||||||
LeaveRequest leave = 3;
|
|
||||||
SlotRequest slot = 4;
|
|
||||||
StartRequest start = 5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message RoomResponse {
|
|
||||||
RoomProto room = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RoomListRequest {
|
|
||||||
bool subscribe = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RoomListResponse {
|
|
||||||
repeated RoomProto rooms = 1;
|
|
||||||
}
|
|
||||||
@@ -9,16 +9,16 @@ import hw.log.BaseLogger.LoggerUtil;
|
|||||||
import ru.m.puzzlez.core.GameEvent;
|
import ru.m.puzzlez.core.GameEvent;
|
||||||
import ru.m.puzzlez.game.IGameManager;
|
import ru.m.puzzlez.game.IGameManager;
|
||||||
import ru.m.puzzlez.game.ServerGame;
|
import ru.m.puzzlez.game.ServerGame;
|
||||||
|
import ru.m.puzzlez.proto.core.GameEventProto;
|
||||||
import ru.m.puzzlez.proto.core.UserProto;
|
import ru.m.puzzlez.proto.core.UserProto;
|
||||||
import ru.m.puzzlez.proto.game.GameEventProto;
|
|
||||||
import ru.m.puzzlez.proto.pack.ErrorResponse;
|
import ru.m.puzzlez.proto.pack.ErrorResponse;
|
||||||
import ru.m.puzzlez.proto.pack.GameEventResponse;
|
import ru.m.puzzlez.proto.pack.GameEventResponse;
|
||||||
|
import ru.m.puzzlez.proto.pack.GameListResponse;
|
||||||
|
import ru.m.puzzlez.proto.pack.GameResponse;
|
||||||
import ru.m.puzzlez.proto.pack.LoginResponse;
|
import ru.m.puzzlez.proto.pack.LoginResponse;
|
||||||
import ru.m.puzzlez.proto.pack.LogoutResponse;
|
import ru.m.puzzlez.proto.pack.LogoutResponse;
|
||||||
import ru.m.puzzlez.proto.pack.Request;
|
import ru.m.puzzlez.proto.pack.Request;
|
||||||
import ru.m.puzzlez.proto.pack.Response;
|
import ru.m.puzzlez.proto.pack.Response;
|
||||||
import ru.m.puzzlez.proto.room.RoomListResponse;
|
|
||||||
import ru.m.puzzlez.proto.room.RoomResponse;
|
|
||||||
import sys.net.Socket;
|
import sys.net.Socket;
|
||||||
|
|
||||||
class GameSession extends ProtoSession<Response, Request> implements GameManagerListener {
|
class GameSession extends ProtoSession<Response, Request> implements GameManagerListener {
|
||||||
@@ -45,9 +45,9 @@ class GameSession extends ProtoSession<Response, Request> implements GameManager
|
|||||||
send(new Response().setError(new ErrorResponse().setCode(code).setMessage(message)));
|
send(new Response().setError(new ErrorResponse().setCode(code).setMessage(message)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function listGame():RoomListResponse {
|
private function listGame():GameListResponse {
|
||||||
var games = gameManager.games;
|
var games = gameManager.games;
|
||||||
return new RoomListResponse().setRooms([for (game in games) game.room]);
|
return new GameListResponse().setGames([for (game in games) game.proto]);
|
||||||
}
|
}
|
||||||
|
|
||||||
override public function send(packet:Response):Void {
|
override public function send(packet:Response):Void {
|
||||||
@@ -139,7 +139,7 @@ class GameSession extends ProtoSession<Response, Request> implements GameManager
|
|||||||
|
|
||||||
public function onCreate(game:ServerGame):Void {
|
public function onCreate(game:ServerGame):Void {
|
||||||
if (subscribed) {
|
if (subscribed) {
|
||||||
send(new Response().setRoomList(listGame()));
|
send(new Response().setGameList(listGame()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,31 +149,33 @@ class GameSession extends ProtoSession<Response, Request> implements GameManager
|
|||||||
case LEAVE(user):
|
case LEAVE(user):
|
||||||
if (user.uuid == this.user.uuid) {
|
if (user.uuid == this.user.uuid) {
|
||||||
gameId = -1;
|
gameId = -1;
|
||||||
send(new Response().setRoom(new RoomResponse()));
|
send(new Response().setGame(new GameResponse()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case _:
|
case _:
|
||||||
}
|
}
|
||||||
send(new Response().setRoom(new RoomResponse().setRoom(game.room)));
|
send(new Response().setGame(new GameResponse().setGame(game.proto)));
|
||||||
}
|
}
|
||||||
if (subscribed) {
|
if (subscribed) {
|
||||||
send(new Response().setRoomList(listGame()));
|
send(new Response().setGameList(listGame()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onDelete(game:ServerGame):Void {
|
public function onDelete(game:ServerGame):Void {
|
||||||
if (gameId == game.id) {
|
if (gameId == game.id) {
|
||||||
gameId = -1;
|
gameId = -1;
|
||||||
send(new Response().setRoom(new RoomResponse()));
|
send(new Response().setGame(new GameResponse()));
|
||||||
}
|
}
|
||||||
if (subscribed) {
|
if (subscribed) {
|
||||||
send(new Response().setRoomList(listGame()));
|
send(new Response().setGameList(listGame()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onEvent(game:ServerGame, event:GameEvent):Void {
|
public function onEvent(game:ServerGame, event:GameEvent):Void {
|
||||||
if (gameId == game.id) {
|
if (gameId == game.id) {
|
||||||
send(new Response().setGameEvent(new GameEventResponse().setEvent(new GameEventProto().setTime(0).setEvent(Serializer.run(event)))));
|
send(new Response().setGameEvent(new GameEventResponse().setEvents([
|
||||||
|
new GameEventProto().setTime(0).setEvent(Serializer.run(event))
|
||||||
|
])));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
package ru.m.puzzlez.game;
|
package ru.m.puzzlez.game;
|
||||||
|
|
||||||
|
import ru.m.puzzlez.core.Id;
|
||||||
import ru.m.puzzlez.core.GameEvent;
|
import ru.m.puzzlez.core.GameEvent;
|
||||||
import ru.m.puzzlez.game.IGameManager;
|
import ru.m.puzzlez.game.IGameManager;
|
||||||
import ru.m.puzzlez.proto.room.SlotProto;
|
|
||||||
import ru.m.puzzlez.proto.room.RoomSlotProto;
|
|
||||||
import ru.m.puzzlez.proto.core.GameProto;
|
import ru.m.puzzlez.proto.core.GameProto;
|
||||||
import ru.m.puzzlez.proto.room.RoomProto;
|
|
||||||
import ru.m.puzzlez.proto.core.UserProto;
|
import ru.m.puzzlez.proto.core.UserProto;
|
||||||
|
|
||||||
class _GameListener implements GameListener {
|
class _GameListener implements GameListener {
|
||||||
@@ -37,7 +35,6 @@ class _GameListener implements GameListener {
|
|||||||
@:dispatcher(GameManagerListener) class GameManager implements IGameManager {
|
@:dispatcher(GameManagerListener) class GameManager implements IGameManager {
|
||||||
public var games(default, null):Array<ServerGame>;
|
public var games(default, null):Array<ServerGame>;
|
||||||
public var gamesById(default, null):Map<Int, ServerGame>;
|
public var gamesById(default, null):Map<Int, ServerGame>;
|
||||||
public var gamesByCreator(default, null):Map<String, ServerGame>;
|
|
||||||
public var gamesByUser(default, null):Map<String, ServerGame>;
|
public var gamesByUser(default, null):Map<String, ServerGame>;
|
||||||
|
|
||||||
private var counter:Int;
|
private var counter:Int;
|
||||||
@@ -46,26 +43,18 @@ class _GameListener implements GameListener {
|
|||||||
counter = 0;
|
counter = 0;
|
||||||
games = [];
|
games = [];
|
||||||
gamesById = new Map();
|
gamesById = new Map();
|
||||||
gamesByCreator = new Map();
|
|
||||||
gamesByUser = new Map();
|
gamesByUser = new Map();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create(user:UserProto):ServerGame {
|
public function create(user:UserProto, imageId:ImageId):ServerGame {
|
||||||
if (gamesByCreator.exists(user.uuid)) {
|
if (gamesByCreator.exists(user.uuid)) {
|
||||||
delete(gamesByCreator[user.uuid].id);
|
delete(gamesByCreator[user.uuid].id);
|
||||||
}
|
}
|
||||||
var room = new RoomProto()
|
var gameProto = new GameProto().setId(++counter).setImageId(imageId);
|
||||||
.setGame(
|
gameProto.users.push(user);
|
||||||
new GameProto()
|
var game = new ServerGame(gameProto);
|
||||||
.setId(++counter)
|
|
||||||
)
|
|
||||||
.setCreator(user);
|
|
||||||
var game = new ServerGame(room);
|
|
||||||
var slots:Array<RoomSlotProto> = [];
|
|
||||||
game.room.setSlots(slots);
|
|
||||||
games.push(game);
|
games.push(game);
|
||||||
gamesById[game.id] = game;
|
gamesById[game.id] = game;
|
||||||
gamesByCreator[game.room.creator.uuid] = game;
|
|
||||||
createSignal.emit(game);
|
createSignal.emit(game);
|
||||||
join(game.id, user);
|
join(game.id, user);
|
||||||
return game;
|
return game;
|
||||||
@@ -85,15 +74,12 @@ class _GameListener implements GameListener {
|
|||||||
var game = gamesById[gameId];
|
var game = gamesById[gameId];
|
||||||
games.remove(game);
|
games.remove(game);
|
||||||
gamesById.remove(game.id);
|
gamesById.remove(game.id);
|
||||||
gamesByCreator.remove(game.room.creator.uuid);
|
|
||||||
deleteSignal.emit(game);
|
deleteSignal.emit(game);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function leave(user:UserProto):Void {
|
public function leave(user:UserProto):Void {
|
||||||
/*if (gamesByCreator.exists(user.uuid)) {
|
if (gamesByUser.exists(user.uuid)) {
|
||||||
delete(gamesByCreator[user.uuid].proto.id);
|
|
||||||
} else*/ if (gamesByUser.exists(user.uuid)) {
|
|
||||||
var game = gamesByUser[user.uuid];
|
var game = gamesByUser[user.uuid];
|
||||||
gamesByUser.remove(user.uuid);
|
gamesByUser.remove(user.uuid);
|
||||||
game.leave(user);
|
game.leave(user);
|
||||||
@@ -101,14 +87,6 @@ class _GameListener implements GameListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function slot(user:UserProto, slot:SlotProto):Void {
|
|
||||||
if (gamesByUser.exists(user.uuid)) {
|
|
||||||
var game = gamesByUser[user.uuid];
|
|
||||||
game.slot(user, slot);
|
|
||||||
changeSignal.emit(game, SLOT(user, slot));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function start(gameId:Int):Void {
|
public function start(gameId:Int):Void {
|
||||||
if (gamesById.exists(gameId)) {
|
if (gamesById.exists(gameId)) {
|
||||||
var game:ServerGame = gamesById[gameId];
|
var game:ServerGame = gamesById[gameId];
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
package ru.m.puzzlez.game;
|
package ru.m.puzzlez.game;
|
||||||
|
|
||||||
|
import ru.m.puzzlez.core.Id;
|
||||||
import hw.signal.Signal;
|
import hw.signal.Signal;
|
||||||
import ru.m.puzzlez.core.GameEvent;
|
import ru.m.puzzlez.core.GameEvent;
|
||||||
import ru.m.puzzlez.proto.core.UserProto;
|
import ru.m.puzzlez.proto.core.UserProto;
|
||||||
import ru.m.puzzlez.proto.room.SlotProto;
|
|
||||||
|
|
||||||
enum GameChange {
|
enum GameChange {
|
||||||
JOIN(user:UserProto);
|
JOIN(user:UserProto);
|
||||||
LEAVE(user:UserProto);
|
LEAVE(user:UserProto);
|
||||||
SLOT(user:UserProto, slot:SlotProto);
|
|
||||||
START();
|
START();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,10 +34,9 @@ interface GameManagerListener {
|
|||||||
public function connect(listener:GameManagerListener):Void;
|
public function connect(listener:GameManagerListener):Void;
|
||||||
public function disconnect(listener:GameManagerListener):Void;
|
public function disconnect(listener:GameManagerListener):Void;
|
||||||
|
|
||||||
public function create(user:UserProto):ServerGame;
|
public function create(user:UserProto, imageId:ImageId):ServerGame;
|
||||||
public function delete(gameId:Int):Void;
|
public function delete(gameId:Int):Void;
|
||||||
public function join(gameId:Int, user:UserProto):Void;
|
public function join(gameId:Int, user:UserProto):Void;
|
||||||
public function slot(user:UserProto, slot:SlotProto):Void;
|
|
||||||
public function leave(user:UserProto):Void;
|
public function leave(user:UserProto):Void;
|
||||||
public function start(gameId:Int):Void;
|
public function start(gameId:Int):Void;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +1,28 @@
|
|||||||
package ru.m.puzzlez.game;
|
package ru.m.puzzlez.game;
|
||||||
|
|
||||||
import haxe.Timer;
|
import haxe.Timer;
|
||||||
import ru.m.puzzlez.core.GameEvent;
|
import ru.m.puzzlez.core.Game;
|
||||||
|
import ru.m.puzzlez.proto.core.GameProto;
|
||||||
import ru.m.puzzlez.proto.core.UserProto;
|
import ru.m.puzzlez.proto.core.UserProto;
|
||||||
import ru.m.puzzlez.proto.room.RoomProto;
|
|
||||||
import ru.m.puzzlez.proto.room.SlotProto;
|
|
||||||
|
|
||||||
@:dispatcher(GameListener) class ServerGame {
|
@:dispatcher(GameListener) class ServerGame extends Game {
|
||||||
|
|
||||||
public var room(default, null):RoomProto;
|
|
||||||
public var id(get, null):Int;
|
public var id(get, null):Int;
|
||||||
|
public var proto(default, default):GameProto;
|
||||||
|
|
||||||
private var timer:Timer;
|
private var timer:Timer;
|
||||||
|
|
||||||
public function new(room:RoomProto) {
|
public function new(proto:GameProto) {
|
||||||
this.room = room;
|
this.proto = proto;
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline function get_id():Int {
|
private inline function get_id():Int {
|
||||||
return room.game.id;
|
return proto.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function contains(user:UserProto):Bool {
|
public function contains(user:UserProto):Bool {
|
||||||
for (slot in room.slots) {
|
for (user in proto.users) {
|
||||||
if (slot.hasUser() && slot.user.uuid == user.uuid) {
|
if (user.uuid == user.uuid) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,41 +31,11 @@ import ru.m.puzzlez.proto.room.SlotProto;
|
|||||||
|
|
||||||
public function join(user:UserProto):Void {
|
public function join(user:UserProto):Void {
|
||||||
if (!contains(user)) {
|
if (!contains(user)) {
|
||||||
room.users.push(user);
|
proto.users.push(user);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function slot(user:UserProto, slot:SlotProto):Void {
|
|
||||||
join(user);
|
|
||||||
for (s in room.slots) {
|
|
||||||
if (s.hasUser() && s.user.uuid == user.uuid) {
|
|
||||||
s.clearUser();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (s in room.slots) {
|
|
||||||
if (s.slot.team == slot.team && s.slot.index == slot.index) {
|
|
||||||
s.setUser(user);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function leave(user:UserProto):Void {
|
public function leave(user:UserProto):Void {
|
||||||
for (slot in room.slots) {
|
proto.setUsers(proto.users.filter(function(u:UserProto) return u.uuid != user.uuid));
|
||||||
if (slot.user != null && slot.user.uuid == user.uuid) {
|
|
||||||
slot.clearUser();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
room.setUsers(room.users.filter(function(u:UserProto) return u.uuid != user.uuid));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function start():Void {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function restore():Array<GameEvent> {
|
|
||||||
return [];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user