Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
AstroProject
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Robin VAN DE MERGHEL
AstroProject
Commits
f1e63dc8
Commit
f1e63dc8
authored
9 months ago
by
ForkBench
Browse files
Options
Downloads
Patches
Plain Diff
First Stages Implemented (Pool, Seedings)
parent
9c9e6458
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
astro/services/Pool.go
+237
-26
237 additions, 26 deletions
astro/services/Pool.go
astro/services/Seeding.go
+163
-0
163 additions, 0 deletions
astro/services/Seeding.go
astro/services/Stage.go
+7
-1
7 additions, 1 deletion
astro/services/Stage.go
astro/services/Util.go
+4
-1
4 additions, 1 deletion
astro/services/Util.go
with
411 additions
and
28 deletions
astro/services/Pool.go
+
237
−
26
View file @
f1e63dc8
...
@@ -6,8 +6,18 @@ type Pool struct {
...
@@ -6,8 +6,18 @@ type Pool struct {
PoolID
uint8
// 255 pools max
PoolID
uint8
// 255 pools max
PoolState
State
PoolState
State
PoolMaxSize
uint16
PoolMaxSize
uint16
PoolPlayers
[]
Player
PoolSize
uint16
PoolReferee
Referee
PoolPlayers
map
[
uint16
]
*
Player
PoolReferee
*
Referee
}
type
PoolStage
struct
{
PoolStageID
uint8
PoolStageSize
uint16
PoolPlayers
map
[
uint16
]
*
Player
PoolStagePools
map
[
uint8
]
*
Pool
PoolStageState
State
PoolEnteringPlayerNumber
uint16
}
}
func
(
p
Pool
)
String
()
string
{
func
(
p
Pool
)
String
()
string
{
...
@@ -22,60 +32,261 @@ func (p Pool) String() string {
...
@@ -22,60 +32,261 @@ func (p Pool) String() string {
return
s
return
s
}
}
func
CreateStage
(
poolID
uint8
,
poolMaxSize
uint16
)
Pool
{
func
Create
Pool
Stage
(
pool
Stage
ID
uint8
,
enteringPlayerNumber
uint16
,
leavingPlayerNumber
uint16
)
Pool
Stage
{
var
p
Pool
var
s
Pool
Stage
p
.
PoolID
=
poolID
s
.
PoolStageID
=
poolStageID
p
.
PoolState
=
IDLE
s
.
PoolEnteringPlayerNumber
=
enteringPlayerNumber
p
.
PoolMaxSize
=
poolMaxSize
s
.
PoolPlayers
=
make
(
map
[
uint16
]
*
Player
)
p
.
PoolPlayers
=
make
([]
Player
,
poolMaxSize
)
s
.
PoolStagePools
=
make
(
map
[
uint8
]
*
Pool
)
p
.
PoolReferee
=
Referee
{}
s
.
PoolStageState
=
IDLE
s
.
PoolStageSize
=
0
return
p
return
s
}
}
func
(
p
Pool
)
PlayerPosition
(
player
Player
)
uint16
{
// From interface
for
i
,
poolPlayer
:=
range
p
.
PoolPlayers
{
func
(
p
*
PoolStage
)
PlayerPosition
(
player
*
Player
)
uint16
{
if
poolPlayer
.
PlayerID
==
player
.
PlayerID
{
for
_
,
pool
:=
range
p
.
PoolStagePools
{
return
uint16
(
i
)
if
pool
.
PlayerPosition
(
player
)
!=
math
.
MaxInt16
{
return
pool
.
PlayerPosition
(
player
)
}
}
}
}
return
math
.
MaxInt16
return
math
.
MaxInt16
}
}
func
(
p
*
Pool
)
AddPlayer
(
player
Player
)
bool
{
// From interface
if
p
.
PoolState
!=
IDLE
{
func
(
p
*
PoolStage
)
AddPlayer
(
player
*
Player
)
bool
{
if
p
.
PoolStageState
!=
REGISTERING
{
return
false
return
false
}
}
if
len
(
p
.
PoolPlayers
)
>=
int
(
p
.
PoolMaxSize
)
{
if
p
.
PlayerPosition
(
player
)
!=
math
.
MaxInt16
{
return
false
}
for
_
,
pool
:=
range
p
.
PoolStagePools
{
if
pool
.
AddPlayer
(
player
)
{
p
.
PoolPlayers
[
player
.
PlayerID
]
=
player
p
.
PoolStageSize
++
pool
.
PoolSize
++
return
true
}
}
// Add pool
pool
:=
&
Pool
{
PoolID
:
uint8
(
len
(
p
.
PoolStagePools
)),
PoolState
:
REGISTERING
,
PoolMaxSize
:
7
,
PoolSize
:
0
,
PoolPlayers
:
make
(
map
[
uint16
]
*
Player
),
PoolReferee
:
nil
,
}
pool
.
AddPlayer
(
player
)
p
.
AddPool
(
pool
)
p
.
PoolPlayers
[
player
.
PlayerID
]
=
player
return
true
}
// From interface
func
(
p
*
PoolStage
)
RemovePlayer
(
player
*
Player
)
bool
{
if
p
.
PoolStageState
!=
REGISTERING
{
return
false
return
false
}
}
if
p
.
PlayerPosition
(
player
)
==
math
.
MaxInt16
{
if
p
.
PlayerPosition
(
player
)
==
math
.
MaxInt16
{
p
.
PoolPlayers
=
append
(
p
.
PoolPlayers
,
player
)
return
false
return
true
}
for
_
,
pool
:=
range
p
.
PoolStagePools
{
if
pool
.
RemovePlayer
(
player
)
{
delete
(
p
.
PoolPlayers
,
player
.
PlayerID
)
p
.
PoolStageSize
--
pool
.
PoolSize
--
if
pool
.
PoolSize
==
0
{
p
.
RemovePool
(
pool
)
}
return
true
}
}
}
return
false
return
false
}
}
func
(
p
*
Pool
)
RemovePlayer
(
player
Player
)
bool
{
// From interface
if
p
.
PoolState
!=
IDLE
{
func
(
p
*
PoolStage
)
GetID
()
uint8
{
return
p
.
PoolStageID
}
// From interface
func
(
p
*
PoolStage
)
GetState
()
State
{
return
p
.
PoolStageState
}
// From interface
func
(
p
*
PoolStage
)
GetPlayers
()
[]
*
Player
{
players
:=
[]
*
Player
{}
for
_
,
player
:=
range
p
.
PoolPlayers
{
players
=
append
(
players
,
player
)
}
return
players
}
// From interface
func
(
p
*
PoolStage
)
Register
()
bool
{
if
p
.
PoolStageState
!=
IDLE
{
return
false
return
false
}
}
pos
:=
p
.
PlayerPosition
(
player
)
p
.
PoolStageState
=
REGISTERING
return
true
}
// From interface
func
(
p
*
PoolStage
)
Start
()
bool
{
if
p
.
PoolStageState
!=
REGISTERING
{
return
false
}
if
pos
!=
math
.
MaxInt16
{
if
p
.
PoolStageSize
<
p
.
PoolEnteringPlayerNumber
{
p
.
PoolPlayers
=
append
(
p
.
PoolPlayers
[
:
pos
],
p
.
PoolPlayers
[
pos
+
1
:
]
...
)
return
false
return
true
}
}
p
.
PoolStageState
=
STARTED
return
true
}
// From interface
func
(
p
*
PoolStage
)
End
()
bool
{
if
p
.
PoolStageState
!=
STARTED
{
return
false
}
p
.
PoolStageState
=
FINISHED
return
true
}
// From interface
func
(
p
*
PoolStage
)
Lock
()
bool
{
if
p
.
PoolStageState
!=
FINISHED
{
return
false
}
p
.
PoolStageState
=
LOCKED
return
true
}
// From interface
func
(
p
*
PoolStage
)
Build
()
bool
{
// TODO: Implement
return
false
return
false
}
}
func
(
p
*
Pool
)
SetReferee
(
referee
Referee
)
{
func
(
p
*
PoolStage
)
AddPool
(
pool
*
Pool
)
bool
{
if
p
.
PoolStageState
!=
REGISTERING
{
return
false
}
if
pool
==
nil
{
return
false
}
p
.
PoolStagePools
[
pool
.
PoolID
]
=
pool
return
true
}
func
(
p
*
PoolStage
)
RemovePool
(
pool
*
Pool
)
bool
{
if
p
.
PoolStageState
!=
REGISTERING
{
return
false
}
if
pool
==
nil
{
return
false
}
if
pool
.
PoolSize
>
0
{
return
false
}
delete
(
p
.
PoolStagePools
,
pool
.
PoolID
)
return
true
}
func
(
p
*
PoolStage
)
GetPool
(
poolID
uint8
)
*
Pool
{
pool
,
ok
:=
p
.
PoolStagePools
[
poolID
]
if
ok
{
return
pool
}
return
nil
}
// ------------------------------ Pool ------------------------------
func
(
p
Pool
)
PlayerPosition
(
player
*
Player
)
uint16
{
_
,
ok
:=
p
.
PoolPlayers
[
player
.
PlayerID
]
if
ok
{
return
p
.
PoolPlayers
[
player
.
PlayerID
]
.
PlayerID
}
return
math
.
MaxInt16
}
func
(
p
*
Pool
)
AddPlayer
(
player
*
Player
)
bool
{
if
p
.
PoolState
!=
REGISTERING
{
return
false
}
if
p
.
PoolSize
>=
p
.
PoolMaxSize
{
return
false
}
if
p
.
PlayerPosition
(
player
)
!=
math
.
MaxInt16
{
return
false
}
p
.
PoolPlayers
[
p
.
PoolSize
]
=
player
p
.
PoolSize
++
return
true
}
func
(
p
*
Pool
)
RemovePlayer
(
player
*
Player
)
bool
{
if
p
.
PoolState
!=
REGISTERING
{
return
false
}
if
p
.
PlayerPosition
(
player
)
==
math
.
MaxInt16
{
return
false
}
delete
(
p
.
PoolPlayers
,
player
.
PlayerID
)
return
true
}
func
(
p
*
Pool
)
SetReferee
(
referee
*
Referee
)
bool
{
if
p
.
PoolState
!=
REGISTERING
{
return
false
}
p
.
PoolReferee
=
referee
p
.
PoolReferee
=
referee
return
true
}
}
This diff is collapsed.
Click to expand it.
astro/services/Seeding.go
0 → 100644
+
163
−
0
View file @
f1e63dc8
package
services
// Seeding : Seeding details
type
Seeding
struct
{
SeedingPosition
uint16
SeedingPlayer
*
Player
}
type
SeedingStage
struct
{
SeedingStageID
uint8
SeedingSize
uint16
SeedingSeedings
map
[
uint16
]
*
Seeding
SeedingState
State
SeedingEnteringPlayerNumber
uint16
}
func
(
s
*
SeedingStage
)
String
()
string
{
var
str
string
str
=
string
(
s
.
SeedingStageID
)
+
" - "
+
s
.
SeedingState
.
String
()
for
_
,
seeding
:=
range
s
.
SeedingSeedings
{
str
=
str
+
"
\n
"
+
seeding
.
SeedingPlayer
.
String
()
}
return
str
}
func
CreateSeedingStage
(
seedingStageID
uint8
,
enteringPlayerNumber
uint16
,
leavingPlayerNumber
uint16
)
SeedingStage
{
var
s
SeedingStage
s
.
SeedingStageID
=
seedingStageID
s
.
SeedingEnteringPlayerNumber
=
enteringPlayerNumber
s
.
SeedingSeedings
=
make
(
map
[
uint16
]
*
Seeding
)
s
.
SeedingState
=
IDLE
s
.
SeedingSize
=
0
return
s
}
// From interface
func
(
s
*
SeedingStage
)
PlayerPosition
(
player
Player
)
uint16
{
return
s
.
SeedingSeedings
[
player
.
PlayerID
]
.
SeedingPosition
}
// From interface
func
(
s
*
SeedingStage
)
AddPlayer
(
player
Player
)
bool
{
if
s
.
SeedingState
!=
REGISTERING
{
return
false
}
if
s
.
SeedingSeedings
[
player
.
PlayerID
]
!=
nil
{
return
false
}
s
.
SeedingSeedings
[
player
.
PlayerID
]
=
&
Seeding
{
SeedingPosition
:
s
.
SeedingSize
,
SeedingPlayer
:
&
player
,
}
s
.
SeedingSize
++
return
true
}
// From interface
func
(
s
*
SeedingStage
)
RemovePlayer
(
player
Player
)
bool
{
if
s
.
SeedingState
!=
REGISTERING
{
return
false
}
if
s
.
SeedingSeedings
[
player
.
PlayerID
]
==
nil
{
return
false
}
delete
(
s
.
SeedingSeedings
,
player
.
PlayerID
)
s
.
SeedingSize
--
return
true
}
// From interface
func
(
s
*
SeedingStage
)
GetID
()
uint8
{
return
s
.
SeedingStageID
}
// From interface
func
(
s
*
SeedingStage
)
GetState
()
State
{
return
s
.
SeedingState
}
// From interface
func
(
s
*
SeedingStage
)
GetPlayers
()
[]
Player
{
players
:=
[]
Player
{}
for
_
,
seeding
:=
range
s
.
SeedingSeedings
{
players
=
append
(
players
,
*
seeding
.
SeedingPlayer
)
}
return
players
}
// From interface
func
(
s
*
SeedingStage
)
Register
()
bool
{
if
s
.
SeedingState
!=
IDLE
{
return
false
}
s
.
SeedingState
=
REGISTERING
return
true
}
// From interface
func
(
s
*
SeedingStage
)
Start
()
bool
{
if
s
.
SeedingState
!=
REGISTERING
{
return
false
}
if
s
.
SeedingSize
!=
s
.
SeedingEnteringPlayerNumber
{
return
false
}
s
.
SeedingState
=
STARTED
return
true
}
// From interface
func
(
s
*
SeedingStage
)
End
()
bool
{
if
s
.
SeedingState
!=
STARTED
{
return
false
}
s
.
SeedingState
=
FINISHED
return
true
}
// From interface
func
(
s
*
SeedingStage
)
Lock
()
bool
{
if
s
.
SeedingState
!=
FINISHED
{
return
false
}
s
.
SeedingState
=
LOCKED
return
true
}
// From interface
func
(
s
*
SeedingStage
)
Build
()
bool
{
if
s
.
SeedingState
!=
REGISTERING
{
return
false
}
if
s
.
SeedingSize
!=
s
.
SeedingEnteringPlayerNumber
{
return
false
}
return
true
}
This diff is collapsed.
Click to expand it.
astro/services/Stage.go
+
7
−
1
View file @
f1e63dc8
...
@@ -2,9 +2,15 @@ package services
...
@@ -2,9 +2,15 @@ package services
// Stage : Stage details
// Stage : Stage details
type
Stage
interface
{
type
Stage
interface
{
CreateStage
(
stageID
uint8
,
stageMaxSize
uint16
)
Stage
PlayerPosition
(
player
Player
)
uint16
PlayerPosition
(
player
Player
)
uint16
AddPlayer
(
player
Player
)
bool
AddPlayer
(
player
Player
)
bool
RemovePlayer
(
player
Player
)
bool
RemovePlayer
(
player
Player
)
bool
GetID
()
uint8
GetID
()
uint8
GetState
()
State
GetPlayers
()
[]
Player
Register
()
bool
Start
()
bool
End
()
bool
Lock
()
bool
Build
()
bool
}
}
This diff is collapsed.
Click to expand it.
astro/services/Util.go
+
4
−
1
View file @
f1e63dc8
...
@@ -107,7 +107,8 @@ const (
...
@@ -107,7 +107,8 @@ const (
REGISTERING
State
=
iota
// 0
REGISTERING
State
=
iota
// 0
STARTED
// 1
STARTED
// 1
FINISHED
// 2
FINISHED
// 2
IDLE
// 3
LOCKED
// 3
IDLE
// 4
)
)
func
(
s
State
)
String
()
string
{
func
(
s
State
)
String
()
string
{
...
@@ -118,6 +119,8 @@ func (s State) String() string {
...
@@ -118,6 +119,8 @@ func (s State) String() string {
return
"Started"
return
"Started"
case
FINISHED
:
case
FINISHED
:
return
"Finished"
return
"Finished"
case
LOCKED
:
return
"Locked"
case
IDLE
:
case
IDLE
:
return
"Idle"
return
"Idle"
default
:
default
:
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment