package main import ( "sync" "github.com/pikami/cosmium/api" "github.com/pikami/cosmium/internal/datastore" ) type ServerInstance struct { server *api.ApiServer dataStore datastore.DataStore } var ( serverInstances = make(map[string]*ServerInstance) mutex = sync.Mutex{} ) const ( ResponseSuccess = 0 ResponseUnknown = 100 ResponseFailedToParseConfiguration = 101 ResponseFailedToLoadState = 102 ResponseFailedToParseRequest = 103 ResponseServerInstanceAlreadyExists = 104 ResponseServerInstanceNotFound = 105 ResponseFailedToStartServer = 106 ResponseCurrentDataStoreDoesNotSupportStateLoading = 107 ResponseDataStoreNotFound = 200 ResponseDataStoreConflict = 201 ResponseDataStoreBadRequest = 202 ) func getInstance(serverName string) (*ServerInstance, bool) { mutex.Lock() defer mutex.Unlock() var ok bool var serverInstance *ServerInstance if serverInstance, ok = serverInstances[serverName]; !ok { return nil, false } return serverInstance, true } func addInstance(serverName string, serverInstance *ServerInstance) { mutex.Lock() defer mutex.Unlock() serverInstances[serverName] = serverInstance } func removeInstance(serverName string) { mutex.Lock() defer mutex.Unlock() delete(serverInstances, serverName) } func dataStoreStatusToResponseCode(status datastore.DataStoreStatus) int { switch status { case datastore.StatusOk: return ResponseSuccess case datastore.StatusNotFound: return ResponseDataStoreNotFound case datastore.Conflict: return ResponseDataStoreConflict case datastore.BadRequest: return ResponseDataStoreBadRequest default: return ResponseUnknown } }