Removed vex files and changed package name
parent
105de0509c
commit
8b7eb57673
@ -1,446 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/graphql-go/graphql"
|
|
||||||
"reflect"
|
|
||||||
"fmt"
|
|
||||||
"errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GQLVexTypes() map[reflect.Type]*graphql.Object {
|
|
||||||
types := map[reflect.Type]*graphql.Object{}
|
|
||||||
types[reflect.TypeOf((*Match)(nil))] = GQLVexTypeMatch()
|
|
||||||
|
|
||||||
return types
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexMutations() map[string]*graphql.Field {
|
|
||||||
mutations := map[string]*graphql.Field{}
|
|
||||||
mutations["setMatchState"] = GQLVexMutationSetMatchState()
|
|
||||||
return mutations
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexQueries() map[string]*graphql.Field {
|
|
||||||
queries := map[string]*graphql.Field{}
|
|
||||||
queries["Arenas"] = GQLVexQueryArenas()
|
|
||||||
return queries
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexSubscriptions() map[string]*graphql.Field {
|
|
||||||
subs := map[string]*graphql.Field{}
|
|
||||||
subs["Arena"] = GQLVexSubscriptionArena()
|
|
||||||
return subs
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_subscription_arena *graphql.Field = nil
|
|
||||||
func GQLVexSubscriptionArena() *graphql.Field {
|
|
||||||
if gql_vex_subscription_arena == nil {
|
|
||||||
gql_vex_subscription_arena = &graphql.Field{
|
|
||||||
Type: GQLVexTypeArena(),
|
|
||||||
Args: graphql.FieldConfigArgument{
|
|
||||||
"arena_id": &graphql.ArgumentConfig{
|
|
||||||
Type: graphql.String,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return p.Source, nil
|
|
||||||
},
|
|
||||||
Subscribe: GQLVexSubscribeArena,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return gql_vex_subscription_arena
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexSubscribeArena(p graphql.ResolveParams)(interface{}, error) {
|
|
||||||
server, ok := p.Context.Value("gql_server").(*GQLServer)
|
|
||||||
if ok == false {
|
|
||||||
return nil, fmt.Errorf("Failed to get gql_Server from context and cast to GQLServer")
|
|
||||||
}
|
|
||||||
|
|
||||||
c := make(chan interface{})
|
|
||||||
arena_id, ok := p.Args["arena_id"].(string)
|
|
||||||
if ok == false {
|
|
||||||
return nil, fmt.Errorf("Failed to get arena_id arg")
|
|
||||||
}
|
|
||||||
owner, ok := server.Owner().(Event)
|
|
||||||
if ok == false {
|
|
||||||
return nil, fmt.Errorf("Failed to cast owner to event")
|
|
||||||
}
|
|
||||||
resource := FindRequiredResource(owner, arena_id)
|
|
||||||
if resource == nil {
|
|
||||||
return nil, fmt.Errorf("Failed to find resource under owner")
|
|
||||||
}
|
|
||||||
arena, ok := resource.(Arena)
|
|
||||||
if ok == false {
|
|
||||||
return nil, fmt.Errorf("Failed to cast resource to arena")
|
|
||||||
}
|
|
||||||
|
|
||||||
sig_c := arena.UpdateChannel()
|
|
||||||
go func(c chan interface{}, sig_c chan GraphSignal, arena Arena) {
|
|
||||||
c <- arena
|
|
||||||
for {
|
|
||||||
_, ok := <- sig_c
|
|
||||||
if ok == false {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c <- arena
|
|
||||||
}
|
|
||||||
}(c, sig_c, arena)
|
|
||||||
return c, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_mutation_set_match_state *graphql.Field= nil
|
|
||||||
func GQLVexMutationSetMatchState() *graphql.Field {
|
|
||||||
if gql_vex_mutation_set_match_state == nil {
|
|
||||||
gql_vex_mutation_set_match_state = &graphql.Field{
|
|
||||||
Type: GQLTypeSignal(),
|
|
||||||
Args: graphql.FieldConfigArgument{
|
|
||||||
"id": &graphql.ArgumentConfig{
|
|
||||||
Type: graphql.String,
|
|
||||||
},
|
|
||||||
"state": &graphql.ArgumentConfig{
|
|
||||||
Type: graphql.String,
|
|
||||||
},
|
|
||||||
"time": &graphql.ArgumentConfig{
|
|
||||||
Type: graphql.DateTime,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
server, ok := p.Context.Value("gql_server").(*GQLServer)
|
|
||||||
if ok == false {
|
|
||||||
return nil, fmt.Errorf("Failed to cast context gql_server to GQLServer: %+v", p.Context.Value("gql_server"))
|
|
||||||
}
|
|
||||||
|
|
||||||
id, ok := p.Args["id"].(string)
|
|
||||||
if ok == false {
|
|
||||||
return nil, errors.New("Failed to cast arg id to string")
|
|
||||||
}
|
|
||||||
|
|
||||||
state, ok := p.Args["state"].(string)
|
|
||||||
if ok == false {
|
|
||||||
return nil, errors.New("Failed to cast arg state to string")
|
|
||||||
}
|
|
||||||
|
|
||||||
signal := NewDownSignal(server, state)
|
|
||||||
|
|
||||||
owner := server.Owner()
|
|
||||||
if owner == nil {
|
|
||||||
return nil, errors.New("Cannot send update without owner")
|
|
||||||
}
|
|
||||||
|
|
||||||
root_event, ok := owner.(Event)
|
|
||||||
if ok == false {
|
|
||||||
return nil, errors.New("Cannot send update to Event unless owned by an Event")
|
|
||||||
}
|
|
||||||
|
|
||||||
node := FindChild(root_event, id)
|
|
||||||
if node == nil {
|
|
||||||
return nil, errors.New("Failed to find id in event tree from server")
|
|
||||||
}
|
|
||||||
|
|
||||||
SendUpdate(node, signal)
|
|
||||||
|
|
||||||
return signal, nil
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return gql_vex_mutation_set_match_state
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_query_arenas *graphql.Field = nil
|
|
||||||
func GQLVexQueryArenas() *graphql.Field {
|
|
||||||
if gql_vex_query_arenas == nil {
|
|
||||||
gql_vex_query_arenas = &graphql.Field{
|
|
||||||
Type: GQLVexListArena(),
|
|
||||||
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
server, ok := p.Context.Value("gql_server").(*GQLServer)
|
|
||||||
if ok == false {
|
|
||||||
panic("Failed to get/cast gql_server from context")
|
|
||||||
}
|
|
||||||
|
|
||||||
owner, is_event := server.Owner().(Event)
|
|
||||||
if is_event == false {
|
|
||||||
return nil, fmt.Errorf("Can't enumerate arenas when server is attached to resource")
|
|
||||||
}
|
|
||||||
return FindResources(owner, reflect.TypeOf((*VirtualArena)(nil))), nil
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return gql_vex_query_arenas
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_list_arena * graphql.List = nil
|
|
||||||
func GQLVexListArena() * graphql.List {
|
|
||||||
if gql_vex_list_arena == nil {
|
|
||||||
gql_vex_list_arena = graphql.NewList(GQLVexTypeArena())
|
|
||||||
}
|
|
||||||
return gql_vex_list_arena
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_list_team * graphql.List = nil
|
|
||||||
func GQLVexListTeam() * graphql.List {
|
|
||||||
if gql_vex_list_team == nil {
|
|
||||||
gql_vex_list_team = graphql.NewList(GQLVexTypeTeam())
|
|
||||||
}
|
|
||||||
return gql_vex_list_team
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_list_alliance * graphql.List = nil
|
|
||||||
func GQLVexListAlliance() * graphql.List {
|
|
||||||
if gql_vex_list_alliance == nil {
|
|
||||||
gql_vex_list_alliance = graphql.NewList(GQLVexTypeAlliance())
|
|
||||||
}
|
|
||||||
return gql_vex_list_alliance
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexMatchAlliances(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return GQLEventFn(p, func(event Event, p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return event.(*Match).alliances, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexMatchArena(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return GQLEventFn(p, func(event Event, p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return event.(*Match).arena, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexMatchControl(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return GQLEventFn(p, func(event Event, p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return event.(*Match).control, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexMatchState(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return GQLEventFn(p, func(event Event, p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return event.(*Match).state, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexMatchStateStart(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return GQLEventFn(p, func(event Event, p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return event.(*Match).control_start, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexMatchStateDuration(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return GQLEventFn(p, func(event Event, p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return event.(*Match).control_duration, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GQLVexAllianceTeams(p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return GQLResourceFn(p, func(resource Resource, p graphql.ResolveParams) (interface{}, error) {
|
|
||||||
return resource.(*Alliance).teams, nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_type_arena * graphql.Object = nil
|
|
||||||
func GQLVexTypeArena() * graphql.Object {
|
|
||||||
if gql_vex_type_arena == nil {
|
|
||||||
gql_vex_type_arena = graphql.NewObject(graphql.ObjectConfig{
|
|
||||||
Name: "Arena",
|
|
||||||
Interfaces: []*graphql.Interface{
|
|
||||||
GQLInterfaceNode(),
|
|
||||||
GQLInterfaceResource(),
|
|
||||||
},
|
|
||||||
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
|
|
||||||
_, ok := p.Value.(Arena)
|
|
||||||
return ok
|
|
||||||
},
|
|
||||||
Fields: graphql.Fields{},
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_arena.AddFieldConfig("ID", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceID,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_arena.AddFieldConfig("Name", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceName,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_arena.AddFieldConfig("Description", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceDescription,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_arena.AddFieldConfig("Parents", &graphql.Field{
|
|
||||||
Type: GQLListResource(),
|
|
||||||
Resolve: GQLResourceParents,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_arena.AddFieldConfig("Owner", &graphql.Field{
|
|
||||||
Type: GQLInterfaceNode(),
|
|
||||||
Resolve: GQLResourceOwner,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return gql_vex_type_arena
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_type_match * graphql.Object = nil
|
|
||||||
func GQLVexTypeMatch() * graphql.Object {
|
|
||||||
if gql_vex_type_match == nil {
|
|
||||||
gql_vex_type_match = graphql.NewObject(graphql.ObjectConfig{
|
|
||||||
Name: "Match",
|
|
||||||
Interfaces: []*graphql.Interface{
|
|
||||||
GQLInterfaceNode(),
|
|
||||||
GQLInterfaceEvent(),
|
|
||||||
},
|
|
||||||
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
|
|
||||||
_, ok := p.Value.(*Match)
|
|
||||||
return ok
|
|
||||||
},
|
|
||||||
Fields: graphql.Fields{},
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("ID", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLEventID,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("Name", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLEventName,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("Description", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLEventDescription,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("Children", &graphql.Field{
|
|
||||||
Type: GQLListEvent(),
|
|
||||||
Resolve: GQLEventChildren,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("Alliances", &graphql.Field{
|
|
||||||
Type: GQLVexListAlliance(),
|
|
||||||
Resolve: GQLVexMatchAlliances,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("Arena", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLVexMatchArena,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("Control", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLVexMatchControl,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("State", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLVexMatchState,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("StateStart", &graphql.Field{
|
|
||||||
Type: graphql.DateTime,
|
|
||||||
Resolve: GQLVexMatchStateStart,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_match.AddFieldConfig("StateDuration", &graphql.Field{
|
|
||||||
Type: graphql.Int,
|
|
||||||
Resolve: GQLVexMatchStateDuration,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return gql_vex_type_match
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_type_alliance * graphql.Object = nil
|
|
||||||
func GQLVexTypeAlliance() * graphql.Object {
|
|
||||||
if gql_vex_type_alliance == nil {
|
|
||||||
gql_vex_type_alliance = graphql.NewObject(graphql.ObjectConfig{
|
|
||||||
Name: "Alliance",
|
|
||||||
Interfaces: []*graphql.Interface{
|
|
||||||
GQLInterfaceNode(),
|
|
||||||
GQLInterfaceResource(),
|
|
||||||
},
|
|
||||||
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
|
|
||||||
_, ok := p.Value.(*Alliance)
|
|
||||||
return ok
|
|
||||||
},
|
|
||||||
Fields: graphql.Fields{},
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_alliance.AddFieldConfig("ID", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceID,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_alliance.AddFieldConfig("Name", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceName,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_alliance.AddFieldConfig("Description", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceDescription,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_alliance.AddFieldConfig("Parents", &graphql.Field{
|
|
||||||
Type: GQLListResource(),
|
|
||||||
Resolve: GQLResourceParents,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_alliance.AddFieldConfig("Owner", &graphql.Field{
|
|
||||||
Type: GQLInterfaceNode(),
|
|
||||||
Resolve: GQLResourceOwner,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_alliance.AddFieldConfig("Teams", &graphql.Field{
|
|
||||||
Type: GQLVexListTeam(),
|
|
||||||
Resolve: GQLVexAllianceTeams,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return gql_vex_type_alliance
|
|
||||||
}
|
|
||||||
|
|
||||||
var gql_vex_type_team * graphql.Object = nil
|
|
||||||
func GQLVexTypeTeam() * graphql.Object {
|
|
||||||
if gql_vex_type_team == nil {
|
|
||||||
gql_vex_type_team = graphql.NewObject(graphql.ObjectConfig{
|
|
||||||
Name: "Team",
|
|
||||||
Interfaces: []*graphql.Interface{
|
|
||||||
GQLInterfaceNode(),
|
|
||||||
GQLInterfaceResource(),
|
|
||||||
},
|
|
||||||
IsTypeOf: func(p graphql.IsTypeOfParams) bool {
|
|
||||||
_, ok := p.Value.(*Team)
|
|
||||||
return ok
|
|
||||||
},
|
|
||||||
Fields: graphql.Fields{},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
gql_vex_type_team.AddFieldConfig("ID", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceID,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_team.AddFieldConfig("Name", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceName,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_team.AddFieldConfig("Description", &graphql.Field{
|
|
||||||
Type: graphql.String,
|
|
||||||
Resolve: GQLResourceDescription,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_team.AddFieldConfig("Parents", &graphql.Field{
|
|
||||||
Type: GQLListResource(),
|
|
||||||
Resolve: GQLResourceParents,
|
|
||||||
})
|
|
||||||
|
|
||||||
gql_vex_type_team.AddFieldConfig("Owner", &graphql.Field{
|
|
||||||
Type: GQLInterfaceNode(),
|
|
||||||
Resolve: GQLResourceOwner,
|
|
||||||
})
|
|
||||||
|
|
||||||
return gql_vex_type_team
|
|
||||||
}
|
|
@ -1,219 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
"runtime/pprof"
|
|
||||||
"os"
|
|
||||||
"os/signal"
|
|
||||||
"syscall"
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
func fake_team(org string, id string, names []string) (*Team, []*Member) {
|
|
||||||
members := []*Member{}
|
|
||||||
for _, name := range(names) {
|
|
||||||
members = append(members, NewMember(name))
|
|
||||||
}
|
|
||||||
team := NewTeam(org, id, members)
|
|
||||||
return team, members
|
|
||||||
}
|
|
||||||
|
|
||||||
func fake_data() (* EventManager) {
|
|
||||||
resources := []Resource{}
|
|
||||||
|
|
||||||
teams_div1 := []*Team{}
|
|
||||||
t1, m1 := fake_team("6659", "A", []string{"jimmy"})
|
|
||||||
t2, m2 := fake_team("6659", "B", []string{"timmy"})
|
|
||||||
t3, m3 := fake_team("6659", "C", []string{"grace"})
|
|
||||||
t4, m4 := fake_team("6659", "D", []string{"jeremy"})
|
|
||||||
t5, m5 := fake_team("210", "W", []string{"bobby"})
|
|
||||||
t6, m6 := fake_team("210", "X", []string{"toby"})
|
|
||||||
t7, m7 := fake_team("210", "Y", []string{"jennifer"})
|
|
||||||
t8, m8 := fake_team("210", "Z", []string{"emily"})
|
|
||||||
teams_div2 := []*Team{}
|
|
||||||
t9, m9 := fake_team("666", "A", []string{"jimmy"})
|
|
||||||
t10, m10 := fake_team("666", "B", []string{"timmy"})
|
|
||||||
t11, m11 := fake_team("666", "C", []string{"grace"})
|
|
||||||
t12, m12 := fake_team("666", "D", []string{"jeremy"})
|
|
||||||
t13, m13 := fake_team("315", "W", []string{"bobby"})
|
|
||||||
t14, m14 := fake_team("315", "X", []string{"toby"})
|
|
||||||
t15, m15 := fake_team("315", "Y", []string{"jennifer"})
|
|
||||||
t16, m16 := fake_team("315", "Z", []string{"emily"})
|
|
||||||
|
|
||||||
teams_div1 = append(teams_div1, t1)
|
|
||||||
teams_div1 = append(teams_div1, t2)
|
|
||||||
teams_div1 = append(teams_div1, t3)
|
|
||||||
teams_div1 = append(teams_div1, t4)
|
|
||||||
teams_div1 = append(teams_div1, t5)
|
|
||||||
teams_div1 = append(teams_div1, t6)
|
|
||||||
teams_div1 = append(teams_div1, t7)
|
|
||||||
teams_div1 = append(teams_div1, t8)
|
|
||||||
teams_div2 = append(teams_div2, t9)
|
|
||||||
teams_div2 = append(teams_div2, t10)
|
|
||||||
teams_div2 = append(teams_div2, t11)
|
|
||||||
teams_div2 = append(teams_div2, t12)
|
|
||||||
teams_div2 = append(teams_div2, t13)
|
|
||||||
teams_div2 = append(teams_div2, t14)
|
|
||||||
teams_div2 = append(teams_div2, t15)
|
|
||||||
teams_div2 = append(teams_div2, t16)
|
|
||||||
|
|
||||||
resources = append(resources, m1[0])
|
|
||||||
resources = append(resources, m2[0])
|
|
||||||
resources = append(resources, m3[0])
|
|
||||||
resources = append(resources, m4[0])
|
|
||||||
resources = append(resources, m5[0])
|
|
||||||
resources = append(resources, m6[0])
|
|
||||||
resources = append(resources, m7[0])
|
|
||||||
resources = append(resources, m8[0])
|
|
||||||
resources = append(resources, m9[0])
|
|
||||||
resources = append(resources, m10[0])
|
|
||||||
resources = append(resources, m11[0])
|
|
||||||
resources = append(resources, m12[0])
|
|
||||||
resources = append(resources, m13[0])
|
|
||||||
resources = append(resources, m14[0])
|
|
||||||
resources = append(resources, m15[0])
|
|
||||||
resources = append(resources, m16[0])
|
|
||||||
|
|
||||||
arenas_div1 := []Arena{}
|
|
||||||
arenas_div1 = append(arenas_div1, NewVirtualArena("Arena 1"))
|
|
||||||
arenas_div1 = append(arenas_div1, NewVirtualArena("Arena 2"))
|
|
||||||
arenas_div2 := []Arena{}
|
|
||||||
arenas_div2 = append(arenas_div2, NewVirtualArena("Arena 3"))
|
|
||||||
arenas_div2 = append(arenas_div2, NewVirtualArena("Arena 4"))
|
|
||||||
|
|
||||||
for _, arena := range arenas_div1 {
|
|
||||||
resources = append(resources, arena)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, arena := range arenas_div2 {
|
|
||||||
resources = append(resources, arena)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, team := range teams_div1 {
|
|
||||||
resources = append(resources, team)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, team := range teams_div2 {
|
|
||||||
resources = append(resources, team)
|
|
||||||
}
|
|
||||||
|
|
||||||
alliances_div1 := []*Alliance{}
|
|
||||||
alliances_div1 = append(alliances_div1, NewAlliance(t1, t2))
|
|
||||||
alliances_div1 = append(alliances_div1, NewAlliance(t3, t4))
|
|
||||||
alliances_div1 = append(alliances_div1, NewAlliance(t5, t6))
|
|
||||||
alliances_div1 = append(alliances_div1, NewAlliance(t7, t8))
|
|
||||||
alliances_div2 := []*Alliance{}
|
|
||||||
alliances_div2 = append(alliances_div2, NewAlliance(t9, t10))
|
|
||||||
alliances_div2 = append(alliances_div2, NewAlliance(t11, t12))
|
|
||||||
alliances_div2 = append(alliances_div2, NewAlliance(t13, t14))
|
|
||||||
alliances_div2 = append(alliances_div2, NewAlliance(t15, t16))
|
|
||||||
|
|
||||||
for _, alliance := range alliances_div1 {
|
|
||||||
resources = append(resources, alliance)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, alliance := range alliances_div2 {
|
|
||||||
resources = append(resources, alliance)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
gql_server := NewGQLServer(":8080", GQLVexTypes(), GQLVexQueries(), GQLVexMutations(), GQLVexSubscriptions())
|
|
||||||
resources = append(resources, gql_server)
|
|
||||||
|
|
||||||
root_event := NewEventQueue("root_event", "", []Resource{gql_server})
|
|
||||||
|
|
||||||
div_1 := NewEventQueue("Division 1", "", []Resource{})
|
|
||||||
err := AddChild(root_event, div_1, NewEventQueueInfo(1))
|
|
||||||
if err != nil {
|
|
||||||
panic(fmt.Sprintf("Failed to add div_1: %s", err))
|
|
||||||
}
|
|
||||||
|
|
||||||
div_2 := NewEventQueue("Division 2", "", []Resource{})
|
|
||||||
err = AddChild(root_event, div_2, NewEventQueueInfo(1))
|
|
||||||
if err != nil {
|
|
||||||
panic(fmt.Sprintf("Failed to add div_2: %s", err))
|
|
||||||
}
|
|
||||||
|
|
||||||
event_manager := NewEventManager(root_event, resources)
|
|
||||||
|
|
||||||
for i, alliance := range(alliances_div1) {
|
|
||||||
for j, alliance2 := range(alliances_div1) {
|
|
||||||
if j != i {
|
|
||||||
if alliance.Children()[0] == alliance2.Children()[0] || alliance.Children()[0] == alliance2.Children()[1] || alliance.Children()[1] == alliance2.Children()[0] || alliance.Children()[1] == alliance2.Children()[1] {
|
|
||||||
} else {
|
|
||||||
for arena_idx := 0; arena_idx < len(arenas_div1); arena_idx++ {
|
|
||||||
match := NewMatch(alliance, alliance2, arenas_div1[arena_idx])
|
|
||||||
log.Logf("test", "Adding %s", match.Name())
|
|
||||||
err := event_manager.AddEvent(div_1, match, NewEventQueueInfo(i))
|
|
||||||
if err != nil {
|
|
||||||
log.Logf("test", "Error adding %s: %s", match.Name(), err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, alliance := range(alliances_div2) {
|
|
||||||
for j, alliance2 := range(alliances_div2) {
|
|
||||||
if j != i {
|
|
||||||
if alliance.Children()[0] == alliance2.Children()[0] || alliance.Children()[0] == alliance2.Children()[1] || alliance.Children()[1] == alliance2.Children()[0] || alliance.Children()[1] == alliance2.Children()[1] {
|
|
||||||
} else {
|
|
||||||
for arena_idx := 0; arena_idx < len(arenas_div2); arena_idx++ {
|
|
||||||
match := NewMatch(alliance, alliance2, arenas_div2[arena_idx])
|
|
||||||
log.Logf("test", "Adding %s", match.Name())
|
|
||||||
err := event_manager.AddEvent(div_2, match, NewEventQueueInfo(i))
|
|
||||||
if err != nil {
|
|
||||||
log.Logf("test", "Error adding %s: %s", match.Name(), err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return event_manager
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
event_manager := fake_data()
|
|
||||||
|
|
||||||
sigs := make(chan os.Signal, 1)
|
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
cpufile, err := os.OpenFile("graphvent.cpu", os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0666)
|
|
||||||
if err != nil {
|
|
||||||
panic("Failed to open cpu profile file")
|
|
||||||
}
|
|
||||||
memfile, err := os.OpenFile("graphvent.mem", os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0666)
|
|
||||||
if err != nil {
|
|
||||||
panic("Failed to open mem profile file")
|
|
||||||
}
|
|
||||||
|
|
||||||
pprof.StartCPUProfile(cpufile)
|
|
||||||
time.Sleep(3000 * time.Millisecond)
|
|
||||||
pprof.WriteHeapProfile(memfile)
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
for true {
|
|
||||||
select {
|
|
||||||
case <-sigs:
|
|
||||||
pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
|
||||||
signal := NewDownSignal(nil, "abort")
|
|
||||||
SendUpdate(event_manager.root_event, signal)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
log.Logf("test", "Starting event_manager")
|
|
||||||
err := event_manager.Run()
|
|
||||||
if err != nil {
|
|
||||||
log.Logf("test", "Error running event_manager: %s", err)
|
|
||||||
} else {
|
|
||||||
log.Logf("test", "Finished event_manager")
|
|
||||||
}
|
|
||||||
pprof.StopCPUProfile()
|
|
||||||
}
|
|
@ -1,275 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
"errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Member struct {
|
|
||||||
BaseResource
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMember(name string) * Member {
|
|
||||||
member := &Member{
|
|
||||||
BaseResource: NewBaseResource(name, "A Team Member", []Resource{}),
|
|
||||||
}
|
|
||||||
|
|
||||||
return member
|
|
||||||
}
|
|
||||||
|
|
||||||
type Team struct {
|
|
||||||
BaseResource
|
|
||||||
Org string
|
|
||||||
Team string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (team * Team) Members() []*Member {
|
|
||||||
ret := make([]*Member, len(team.children))
|
|
||||||
for idx, member := range(team.children) {
|
|
||||||
ret[idx] = member.(*Member)
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTeam(org string, team string, members []*Member) * Team {
|
|
||||||
name := fmt.Sprintf("%s%s", org, team)
|
|
||||||
description := fmt.Sprintf("Team %s", name)
|
|
||||||
resource := &Team{
|
|
||||||
BaseResource: NewBaseResource(name, description, make([]Resource, len(members))),
|
|
||||||
Org: org,
|
|
||||||
Team: team,
|
|
||||||
}
|
|
||||||
|
|
||||||
for idx, member := range(members) {
|
|
||||||
resource.children[idx] = member
|
|
||||||
}
|
|
||||||
|
|
||||||
return resource
|
|
||||||
}
|
|
||||||
|
|
||||||
type Alliance struct {
|
|
||||||
BaseResource
|
|
||||||
teams []*Team
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewAlliance(team0 * Team, team1 * Team) * Alliance {
|
|
||||||
name := fmt.Sprintf("Alliance %s/%s", team0.Name(), team1.Name())
|
|
||||||
description := ""
|
|
||||||
|
|
||||||
resource := &Alliance{
|
|
||||||
BaseResource: NewBaseResource(name, description, []Resource{team0, team1}),
|
|
||||||
teams: []*Team{team0, team1},
|
|
||||||
}
|
|
||||||
return resource
|
|
||||||
}
|
|
||||||
|
|
||||||
type Arena interface {
|
|
||||||
Resource
|
|
||||||
}
|
|
||||||
|
|
||||||
type VirtualArena struct {
|
|
||||||
BaseResource
|
|
||||||
connected bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewVirtualArena(name string) * VirtualArena {
|
|
||||||
arena := &VirtualArena{
|
|
||||||
BaseResource: NewBaseResource(name, "A virtual vex arena", []Resource{}),
|
|
||||||
connected: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
return arena
|
|
||||||
}
|
|
||||||
|
|
||||||
func (arena * VirtualArena) lock(node GraphNode) error {
|
|
||||||
if arena.connected == false {
|
|
||||||
log.Logf("vex", "ARENA NOT CONNECTED: %s", arena.Name())
|
|
||||||
error_str := fmt.Sprintf("%s is not connected, cannot lock", arena.Name())
|
|
||||||
return errors.New(error_str)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (arena * VirtualArena) update(signal GraphSignal) {
|
|
||||||
arena.signal <- signal
|
|
||||||
arena.BaseResource.update(signal)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (arena * VirtualArena) Init(abort chan error) bool {
|
|
||||||
log.Logf("vex", "Initializing %s", arena.Name())
|
|
||||||
go func(arena * VirtualArena, abort chan error) {
|
|
||||||
signal := NewSignal(arena, "resource_connected")
|
|
||||||
arena.connected = true
|
|
||||||
SendUpdate(arena, signal)
|
|
||||||
log.Logf("vex", "VIRTUAL_ARENA goroutine starting: %s", arena.Name())
|
|
||||||
for true {
|
|
||||||
select {
|
|
||||||
case <- abort:
|
|
||||||
log.Logf("vex", "Virtual arena %s aborting", arena.Name())
|
|
||||||
break
|
|
||||||
case update := <- arena.signal:
|
|
||||||
log.Logf("vex", "VIRTUAL_ARENA_ACTION: %s : %+v", arena.Name(), update)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}(arena, abort)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
type VexEvent struct {
|
|
||||||
BaseEvent
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewVexEvent(name string, description string) * VexEvent {
|
|
||||||
event := &VexEvent{
|
|
||||||
BaseEvent: NewBaseEvent(name, description, []Resource{}),
|
|
||||||
}
|
|
||||||
|
|
||||||
event.actions["wait"] = EventWait(event)
|
|
||||||
event.handlers["abort"] = EventAbort(event)
|
|
||||||
event.actions["start"] = func() (string, error) {
|
|
||||||
log.Logf("vex", "STARTING_VEX_TOURNAMENT %s", event.Name())
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return event
|
|
||||||
}
|
|
||||||
|
|
||||||
const start_slack = 250 * time.Millisecond
|
|
||||||
const TEMP_AUTON_TIME = 5 * time.Second
|
|
||||||
const TEMP_DRIVE_TIME = 5 * time.Second
|
|
||||||
|
|
||||||
type Match struct {
|
|
||||||
BaseEvent
|
|
||||||
arena Arena
|
|
||||||
state string
|
|
||||||
control string
|
|
||||||
control_start time.Time
|
|
||||||
control_duration time.Duration
|
|
||||||
alliances []*Alliance
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMatch(alliance0 * Alliance, alliance1 * Alliance, arena Arena) * Match {
|
|
||||||
name := fmt.Sprintf("Match: %s vs. %s on %s", alliance0.Name(), alliance1.Name(), arena.Name())
|
|
||||||
description := "A vex match"
|
|
||||||
|
|
||||||
match := &Match{
|
|
||||||
BaseEvent: NewBaseEvent(name, description, []Resource{alliance0, alliance1, arena}),
|
|
||||||
state: "init",
|
|
||||||
control: "init",
|
|
||||||
control_start: time.UnixMilli(0),
|
|
||||||
control_duration: 0,
|
|
||||||
arena: arena,
|
|
||||||
alliances: []*Alliance{alliance0, alliance1},
|
|
||||||
}
|
|
||||||
|
|
||||||
match.actions["wait"] = EventWait(match)
|
|
||||||
match.handlers["abort"] = EventAbort(match)
|
|
||||||
|
|
||||||
match.actions["start"] = func() (string, error) {
|
|
||||||
log.Logf("vex", "STARTING_MATCH %s", match.Name())
|
|
||||||
match.control = "none"
|
|
||||||
match.state = "scheduled"
|
|
||||||
match.control_start = time.Now()
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
match.handlers["queue_autonomous"] = func(signal GraphSignal) (string, error) {
|
|
||||||
if match.state != "scheduled" {
|
|
||||||
log.Logf("vex", "BAD_STATE: %s: %s - %s", signal.Type(), match.state, match.Name())
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
log.Logf("vex", "AUTONOMOUS_QUEUED: %s", match.Name())
|
|
||||||
match.control = "none"
|
|
||||||
match.state = "autonomous_queued"
|
|
||||||
match.control_start = time.Now().Add(start_slack)
|
|
||||||
new_signal := NewSignal(match, "autonomous_queued")
|
|
||||||
go SendUpdate(match, new_signal)
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
match.handlers["start_autonomous"] = func(signal GraphSignal) (string, error) {
|
|
||||||
if match.state != "autonomous_queued" {
|
|
||||||
log.Logf("vex", "BAD_STATE: %s: %s - %s", signal.Type(), match.state, match.Name())
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
log.Logf("vex", "AUTONOMOUS_RUNNING: %s", match.Name())
|
|
||||||
match.control = "program"
|
|
||||||
match.state = "autonomous_running"
|
|
||||||
match.control_start = time.Now() // TODO
|
|
||||||
match.control_duration = TEMP_AUTON_TIME
|
|
||||||
|
|
||||||
go SendUpdate(match, NewSignal(match, "autonomous_running"))
|
|
||||||
|
|
||||||
end_time := match.control_start.Add(TEMP_AUTON_TIME)
|
|
||||||
match.SetTimeout(end_time, "autonomous_done")
|
|
||||||
log.Logf("vex", "AUTONOMOUS@%s: %s UNTIL %s", time.Now(), match.control_start, end_time)
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
match.handlers["autonomous_done"] = func(signal GraphSignal) (string, error) {
|
|
||||||
if match.state != "autonomous_running" {
|
|
||||||
log.Logf("vex", "BAD_STATE: %s: %s - %s", signal.Type(), match.state, match.Name())
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
log.Logf("vex", "AUTONOMOUS_DONE: %s", match.Name())
|
|
||||||
match.control = "none"
|
|
||||||
match.state = "autonomous_done"
|
|
||||||
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
match.handlers["queue_driver"] = func(signal GraphSignal) (string, error) {
|
|
||||||
if match.state != "autonomous_done"{
|
|
||||||
log.Logf("vex", "BAD_STATE: %s: %s - %s", signal.Type(), match.state, match.Name())
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
match.control = "none"
|
|
||||||
match.state = "driver_queued"
|
|
||||||
match.control_start = time.Now().Add(start_slack)
|
|
||||||
new_signal := NewSignal(match, "driver_queued")
|
|
||||||
go SendUpdate(match, new_signal)
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
match.handlers["start_driver"] = func(signal GraphSignal) (string, error) {
|
|
||||||
if match.state != "driver_queued" {
|
|
||||||
log.Logf("vex", "BAD_STATE: %s: %s - %s", signal.Type(), match.state, match.Name())
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
match.control = "driver"
|
|
||||||
match.state = "driver_running"
|
|
||||||
match.control_start = time.Now() // TODO
|
|
||||||
match.control_duration = TEMP_DRIVE_TIME
|
|
||||||
|
|
||||||
go SendUpdate(match, NewSignal(match, "driver_running"))
|
|
||||||
|
|
||||||
end_time := match.control_start.Add(TEMP_DRIVE_TIME)
|
|
||||||
match.SetTimeout(end_time, "driver_done")
|
|
||||||
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
match.handlers["driver_done"] = func(signal GraphSignal) (string, error) {
|
|
||||||
if match.state != "driver_running" {
|
|
||||||
log.Logf("vex", "BAD_STATE: %s: %s - %s", signal.Type(), match.state, match.Name())
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
match.control = "none"
|
|
||||||
match.state = "driver_done"
|
|
||||||
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
match.actions["driver_done"] = func() (string, error) {
|
|
||||||
SendUpdate(match, NewSignal(match, "driver_done"))
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
match.actions["autonomous_done"] = func() (string, error) {
|
|
||||||
SendUpdate(match, NewSignal(match, "autonomous_done"))
|
|
||||||
return "wait", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return match
|
|
||||||
}
|
|
@ -1,174 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"fmt"
|
|
||||||
"runtime/pprof"
|
|
||||||
"os"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type vex_tester graph_tester
|
|
||||||
|
|
||||||
func TestNewMemberAdd(t *testing.T) {
|
|
||||||
name := "Noah"
|
|
||||||
|
|
||||||
member := NewMember(name)
|
|
||||||
root_event := NewEvent("", "", []Resource{member})
|
|
||||||
event_manager := NewEventManager(root_event, []Resource{member})
|
|
||||||
res := event_manager.FindResource(member.ID())
|
|
||||||
|
|
||||||
if res == nil {
|
|
||||||
t.Fatal("Failed to find member in event_manager")
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.Name() != name || res.ID() != member.ID() {
|
|
||||||
t.Fatal("Name/ID of returned resource did not match")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNewTeamAdd(t *testing.T) {
|
|
||||||
name_1 := "Noah"
|
|
||||||
name_2 := "Ben"
|
|
||||||
|
|
||||||
org := "6659"
|
|
||||||
team_id := "S"
|
|
||||||
|
|
||||||
member_1 := NewMember(name_1)
|
|
||||||
member_2 := NewMember(name_2)
|
|
||||||
|
|
||||||
team := NewTeam(org, team_id, []*Member{member_1, member_2})
|
|
||||||
|
|
||||||
root_event := NewEvent("", "", []Resource{team})
|
|
||||||
event_manager := NewEventManager(root_event, []Resource{member_1, member_2, team})
|
|
||||||
res := event_manager.FindResource(team.ID())
|
|
||||||
|
|
||||||
if res == nil {
|
|
||||||
t.Fatal("Failed to find team in event_manager")
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.Name() != fmt.Sprintf("%s%s", org, team_id) || res.ID() != team.ID() {
|
|
||||||
t.Fatal("Name/ID of returned team did not match")
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.Children()[0].ID() != member_1.ID() && res.Children()[1].ID() != member_1.ID() {
|
|
||||||
t.Fatal("Could not find member_1 in team")
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.Children()[0].ID() != member_2.ID() && res.Children()[1].ID() != member_2.ID() {
|
|
||||||
t.Fatal("Could not find member_2 in team")
|
|
||||||
}
|
|
||||||
|
|
||||||
res = event_manager.FindResource(member_1.ID())
|
|
||||||
|
|
||||||
if res == nil {
|
|
||||||
t.Fatal("Failed to find member_1 in event_manager")
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.Name() != name_1 || res.ID() != member_1.ID() {
|
|
||||||
t.Fatal("Name/ID of returned member_1 did not match")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNewAllianceAdd(t *testing.T) {
|
|
||||||
name_1 := "Noah"
|
|
||||||
name_2 := "Ben"
|
|
||||||
|
|
||||||
org_1 := "6659"
|
|
||||||
team_id_1 := "S"
|
|
||||||
|
|
||||||
org_2 := "210"
|
|
||||||
team_id_2 := "Y"
|
|
||||||
|
|
||||||
member_1 := NewMember(name_1)
|
|
||||||
member_2 := NewMember(name_2)
|
|
||||||
|
|
||||||
team_1 := NewTeam(org_1, team_id_1, []*Member{member_1})
|
|
||||||
team_2 := NewTeam(org_2, team_id_2, []*Member{member_2})
|
|
||||||
|
|
||||||
alliance := NewAlliance(team_1, team_2)
|
|
||||||
|
|
||||||
root_event := NewEvent("", "", []Resource{alliance})
|
|
||||||
event_manager := NewEventManager(root_event, []Resource{member_1, member_2, team_1, team_2, alliance})
|
|
||||||
res := event_manager.FindResource(alliance.ID())
|
|
||||||
|
|
||||||
if res == nil {
|
|
||||||
t.Fatal("Failed to find alliance in event_manager")
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.Name() != fmt.Sprintf("Alliance %s/%s", team_1.Name(), team_2.Name()) || res.ID() != alliance.ID() {
|
|
||||||
t.Fatal("Name/ID of returned alliance did not match")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNewMatch(t *testing.T) {
|
|
||||||
name_1 := "Noah"
|
|
||||||
name_2 := "Ben"
|
|
||||||
name_3 := "Justin"
|
|
||||||
name_4 := "Ian"
|
|
||||||
|
|
||||||
org_1 := "6659"
|
|
||||||
org_2 := "210"
|
|
||||||
|
|
||||||
team_id_1 := "S"
|
|
||||||
team_id_2 := "Y"
|
|
||||||
|
|
||||||
arena_name := "Center Arena"
|
|
||||||
|
|
||||||
member_1 := NewMember(name_1)
|
|
||||||
member_2 := NewMember(name_2)
|
|
||||||
|
|
||||||
member_3 := NewMember(name_3)
|
|
||||||
member_4 := NewMember(name_4)
|
|
||||||
|
|
||||||
team_1 := NewTeam(org_1, team_id_1, []*Member{member_1})
|
|
||||||
team_2 := NewTeam(org_1, team_id_2, []*Member{member_2})
|
|
||||||
|
|
||||||
team_3 := NewTeam(org_2, team_id_1, []*Member{member_3})
|
|
||||||
team_4 := NewTeam(org_2, team_id_2, []*Member{member_4})
|
|
||||||
|
|
||||||
alliance_1 := NewAlliance(team_1, team_2)
|
|
||||||
alliance_2 := NewAlliance(team_3, team_4)
|
|
||||||
|
|
||||||
arena := NewVirtualArena(arena_name)
|
|
||||||
arena_c := arena.UpdateChannel()
|
|
||||||
|
|
||||||
match := NewMatch(alliance_1, alliance_2, arena)
|
|
||||||
root_event := NewEventQueue("root_event", "", []Resource{})
|
|
||||||
r := root_event.DoneResource()
|
|
||||||
|
|
||||||
event_manager := NewEventManager(root_event, []Resource{member_1, member_2, member_3, member_4, team_1, team_2, team_3, team_4, alliance_1, alliance_2, arena})
|
|
||||||
event_manager.AddEvent(root_event, match, NewEventQueueInfo(1))
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
time.Sleep(time.Second * 20)
|
|
||||||
if r.Owner() != nil {
|
|
||||||
pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
|
||||||
abort_signal := NewDownSignal(root_event, "abort")
|
|
||||||
SendUpdate(root_event, abort_signal)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func(arena_c chan GraphSignal) {
|
|
||||||
(*graph_tester)(t).WaitForValue(arena_c, "event_start", match, 1*time.Second, "no event_start")
|
|
||||||
SendUpdate(arena, NewDownSignal(nil, "queue_autonomous"))
|
|
||||||
(*graph_tester)(t).WaitForValue(arena_c, "autonomous_queued", match, 1*time.Second, "no autonomous_queued")
|
|
||||||
auton_signal := NewDownSignal(nil, "start_autonomous")
|
|
||||||
SendUpdate(arena, auton_signal)
|
|
||||||
(*graph_tester)(t).WaitForValue(arena_c, "autonomous_running", match, 1*time.Second, "no autonomous_running")
|
|
||||||
(*graph_tester)(t).WaitForValue(arena_c, "autonomous_done", match, 6*time.Second, "no autonomous_done")
|
|
||||||
SendUpdate(arena, NewDownSignal(nil, "queue_driver"))
|
|
||||||
(*graph_tester)(t).WaitForValue(arena_c, "driver_queued", match, 1*time.Second, "no driver_queued")
|
|
||||||
driver_signal := NewDownSignal(nil, "start_driver")
|
|
||||||
SendUpdate(arena, driver_signal)
|
|
||||||
(*graph_tester)(t).WaitForValue(arena_c, "driver_running", match, 1*time.Second, "no driver_running")
|
|
||||||
(*graph_tester)(t).WaitForValue(arena_c, "driver_done", match, 6*time.Second, "no driver_done")
|
|
||||||
cancel_signal := NewDownSignal(nil, "cancel")
|
|
||||||
SendUpdate(root_event, cancel_signal)
|
|
||||||
}(arena_c)
|
|
||||||
|
|
||||||
err := event_manager.Run()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue