Skip to content

Commit

Permalink
Alpha SDK.SetPlayerCapacity & GetPlayerCapacity
Browse files Browse the repository at this point in the history
This PR doesn't complete this functionality, but was enough to warrant
review.

It does two things:
1. The refactoring to move alpha and beta SDK Server implementations
into the same file as the main SDK Server, as being able to reuse the
current logic made sense on review.
2. Initial Implementation of SDK GetPlayerCapacity & SetPlayerCapacity
methods with unit tests. E2E tests can be implemented once googleforgames#1397 is
resolved.

Next steps will be to implement the local SDK functionality, and
conformance tests for Go for these two functions.

Work on googleforgames#1033
  • Loading branch information
markmandel committed Mar 31, 2020
1 parent 154e7fe commit 83add1c
Show file tree
Hide file tree
Showing 13 changed files with 341 additions and 216 deletions.
42 changes: 16 additions & 26 deletions cmd/sdk-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ import (
sdkalpha "agones.dev/agones/pkg/sdk/alpha"
sdkbeta "agones.dev/agones/pkg/sdk/beta"
"agones.dev/agones/pkg/sdkserver"
serveralpha "agones.dev/agones/pkg/sdkserver/alpha"
serverbeta "agones.dev/agones/pkg/sdkserver/beta"
"agones.dev/agones/pkg/util/runtime"
"agones.dev/agones/pkg/util/signals"
gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime"
Expand Down Expand Up @@ -154,8 +152,8 @@ func main() {
}
}()
sdk.RegisterSDKServer(grpcServer, s)
sdkalpha.RegisterSDKServer(grpcServer, serveralpha.NewSDKServer())
sdkbeta.RegisterSDKServer(grpcServer, serverbeta.NewSDKServer())
sdkalpha.RegisterSDKServer(grpcServer, s)
sdkbeta.RegisterSDKServer(grpcServer, s)
}

grpcEndpoint := fmt.Sprintf("%s:%d", ctlConf.Address, ctlConf.GRPCPort)
Expand Down Expand Up @@ -185,45 +183,37 @@ func registerLocal(grpcServer *grpc.Server, ctlConf config) (func(), error) {
}
}

stableSDK, err := sdkserver.NewLocalSDKServer(filePath)
s, err := sdkserver.NewLocalSDKServer(filePath)
if err != nil {
return nil, err
}
alphaSDK := serveralpha.NewLocalSDKServer()
betaSDK := serverbeta.NewLocalSDKServer()

sdk.RegisterSDKServer(grpcServer, stableSDK)
sdkalpha.RegisterSDKServer(grpcServer, alphaSDK)
sdkbeta.RegisterSDKServer(grpcServer, betaSDK)
sdk.RegisterSDKServer(grpcServer, s)
sdkalpha.RegisterSDKServer(grpcServer, s)
sdkbeta.RegisterSDKServer(grpcServer, s)
return func() {
alphaSDK.Close()
betaSDK.Close()
stableSDK.Close()
s.Close()
}, err
}

// registerLocal registers the local test SDK servers, and returns a cancel func that
// closes all the SDK implementations
func registerTestSdkServer(grpcServer *grpc.Server, ctlConf config) (func(), error) {
stableSDK, err := sdkserver.NewLocalSDKServer("")
s, err := sdkserver.NewLocalSDKServer("")
if err != nil {
return nil, err
}
alphaSDK := serveralpha.NewLocalSDKServer()
betaSDK := serverbeta.NewLocalSDKServer()

stableSDK.SetTestMode(true)
stableSDK.GenerateUID()
s.SetTestMode(true)
s.GenerateUID()
expectedFuncs := strings.Split(ctlConf.Test, ",")
stableSDK.SetExpectedSequence(expectedFuncs)
s.SetExpectedSequence(expectedFuncs)

sdk.RegisterSDKServer(grpcServer, stableSDK)
sdkalpha.RegisterSDKServer(grpcServer, alphaSDK)
sdkbeta.RegisterSDKServer(grpcServer, betaSDK)
sdk.RegisterSDKServer(grpcServer, s)
sdkalpha.RegisterSDKServer(grpcServer, s)
sdkbeta.RegisterSDKServer(grpcServer, s)
return func() {
alphaSDK.Close()
betaSDK.Close()
stableSDK.Close()
s.Close()
}, err
}

Expand Down Expand Up @@ -281,7 +271,7 @@ func parseEnvFlags() config {
pflag.Int(httpPortFlag, viper.GetInt(httpPortFlag), fmt.Sprintf("Port on which to bind the HTTP server. Defaults to %d", defaultHTTPPort))
pflag.Int(delayFlag, viper.GetInt(delayFlag), "Time to delay (in seconds) before starting to execute main. Useful for tests")
pflag.Int(timeoutFlag, viper.GetInt(timeoutFlag), "Time of execution (in seconds) before close. Useful for tests")
pflag.String(testFlag, viper.GetString(testFlag), "List functions which shoud be called during the SDK Conformance test run.")
pflag.String(testFlag, viper.GetString(testFlag), "List functions which should be called during the SDK Conformance test run.")
runtime.FeaturesBindFlags()
pflag.Parse()

Expand Down
8 changes: 5 additions & 3 deletions pkg/apis/agones/v1/gameserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,10 +313,12 @@ func (gs *GameServer) applyStatusDefaults() {
}

if runtime.FeatureEnabled(runtime.FeaturePlayerTracking) {
// set value if enabled, otherwise very easy to accidentally panic
// when gs.Status.Players is nil
if gs.Status.Players == nil {
gs.Status.Players = &PlayerStatus{}
}
if gs.Spec.Players != nil {
if gs.Status.Players == nil {
gs.Status.Players = &PlayerStatus{}
}
gs.Status.Players.Capacity = gs.Spec.Players.InitialCapacity
}
}
Expand Down
62 changes: 0 additions & 62 deletions pkg/sdkserver/alpha/localsdk.go

This file was deleted.

57 changes: 0 additions & 57 deletions pkg/sdkserver/alpha/sdkserver.go

This file was deleted.

33 changes: 0 additions & 33 deletions pkg/sdkserver/beta/localsdk.go

This file was deleted.

28 changes: 0 additions & 28 deletions pkg/sdkserver/beta/sdkserver.go

This file was deleted.

33 changes: 32 additions & 1 deletion pkg/sdkserver/localsdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import (

agonesv1 "agones.dev/agones/pkg/apis/agones/v1"
"agones.dev/agones/pkg/sdk"
"agones.dev/agones/pkg/sdk/alpha"
"agones.dev/agones/pkg/sdk/beta"
"github.com/fsnotify/fsnotify"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
Expand All @@ -33,7 +35,9 @@ import (
)

var (
_ sdk.SDKServer = &LocalSDKServer{}
_ sdk.SDKServer = &LocalSDKServer{}
_ alpha.SDKServer = &LocalSDKServer{}
_ beta.SDKServer = &LocalSDKServer{}

defaultGs = &sdk.GameServer{
ObjectMeta: &sdk.GameServer_ObjectMeta{
Expand Down Expand Up @@ -425,3 +429,30 @@ func (l *LocalSDKServer) setGameServerFromFilePath(filePath string) error {
l.gs = convert(&gs)
return nil
}

/* Alpha Functionality */

// PlayerConnect should be called when a player connects.
func (l *LocalSDKServer) PlayerConnect(ctx context.Context, id *alpha.PlayerId) (*alpha.Empty, error) {
panic("implement me")
}

// PlayerDisconnect should be called when a player disconnects.
func (l *LocalSDKServer) PlayerDisconnect(ctx context.Context, id *alpha.PlayerId) (*alpha.Empty, error) {
panic("implement me")
}

// SetPlayerCapacity to change the game server's player capacity.
func (l *LocalSDKServer) SetPlayerCapacity(ctx context.Context, count *alpha.Count) (*alpha.Empty, error) {
panic("implement me")
}

// GetPlayerCapacity returns the current player capacity.
func (l *LocalSDKServer) GetPlayerCapacity(ctx context.Context, _ *alpha.Empty) (*alpha.Count, error) {
panic("implement me")
}

// GetPlayerCount returns the current player count.
func (l *LocalSDKServer) GetPlayerCount(ctx context.Context, _ *alpha.Empty) (*alpha.Count, error) {
panic("implement me")
}
Loading

0 comments on commit 83add1c

Please sign in to comment.