public ObjectsManager(DatabaseAgentRef database, IConnection conn) { _logger = LogManager.GetLogger("[Objects Manager]"); _database = database; _conn = conn; _logger.Info("is online"); }
public ServerConnection(DatabaseAgentRef database) { _loggedInUsers = new List <Guid>(); _allClientObjects = new Dictionary <Guid, Tuple <Guid, IGameObject> >(); _database = database; _logger = LogManager.GetLogger("[Connection]"); _clients = new Dictionary <Guid, IConnectionObserver>(); // _spawnedObjects = new Dictionary<Guid, IGameObject>(); _loadedScenes = new Dictionary <Guid, ISceneActor>(); _logger.Info("Server connection initialized"); }
public ServerSceneActor(DatabaseScene dscene, DatabaseAgentRef database, IConnection conn) { _logger = LogManager.GetLogger($"[Scene: {dscene.ServerName}]"); _serverName = dscene.ServerName; _sceneName = dscene.SceneName; _bundleId = dscene.BundleId; _database = database; _conn = conn; _localId = dscene.LocalId; _ownerId = Guid.Empty; }
/// <summary> /// Constructs a server-side game object /// </summary> /// <param name="conn">Connection</param> /// <param name="database">Main DB</param> /// <param name="namePrefab">Prefab for owner (avatar,for example)</param> /// <param name="nameNotOwnedPrefab">Prefab for others (should be same if not owned)</param> /// <param name="localId">Object local Id</param> /// <param name="ownerID">Owner Id</param> /// <param name="bundleId">Bundle id, if object is from bundle</param> /// <param name="avatarId">Avatar id</param> /// <param name="avProps">Avatar properties. Should be JSON.</param> /// <param name="additionalBehavioursNamed">Additional behaviours by typename. Currently unused.</param> /// <param name="additionalBehaviours">Collection of additional behaviours by snapshots</param> public ServerGameObject(IConnection conn, DatabaseAgentRef database, string namePrefab, string nameNotOwnedPrefab, Guid localId, Guid ownerID, Guid bundleId, Guid avatarId, Guid userId, string avProps, List <string> additionalBehavioursNamed, List <JediumBehaviourSnapshot> additionalBehaviours ) { _log = LogManager.GetLogger("Object: " + localId + ", prefab:" + namePrefab); _localId = localId; _bundleId = bundleId; _avatarId = avatarId; _clients = new Dictionary <Guid, ClientConnectionHolderRef>(); _connection = conn; _database = database; _namePrefab = namePrefab; _nameNotOwnedPrefab = nameNotOwnedPrefab; _ownerId = ownerID; Dictionary <string, JediumBehaviourDBSnapshot> dbsnaps = _database.GetObjectBehaviours(_localId).Result; //and for avatar if (avatarId != Guid.Empty) { Dictionary <string, JediumBehaviourDBSnapshot> avsnaps = _database.GetObjectBehaviours(avatarId).Result; foreach (var asnap in avsnaps) { if (!dbsnaps.ContainsKey(asnap.Key)) { dbsnaps.Add(asnap.Key, asnap.Value); } } _avatarProps = avProps; _userId = userId; } _gameObject = new JediumGameObject(this, additionalBehaviours, dbsnaps, _ownerId, _localId); conn.SpawnGameObject(_namePrefab, _nameNotOwnedPrefab, localId, ownerID, _bundleId, avatarId, this ).Wait(); MessageNum = 0; _log.Info(" is online, address: " + GetRemoteAddress()); }
public bool Start() { _logger = LogManager.GetLogger("[MainHost]"); _logger.Info("------------------------------JEDIUM SERVER---------------------------"); _logger.Info("Starting at: " + DateTime.Now); //settings var parser = new FileIniDataParser(); IniData data = parser.ReadFile("config\\ServerConfig.ini"); MainSettings.BehavioursPluginPath = data["Server"]["BehavioursPluginPath"]; MainSettings.WebApiHost = data["Server"]["WebApiHost"]; MainSettings.DBUrl = data["Server"]["DBUrl"]; MainSettings.DatabaseName = data["Server"]["DatabaseName"]; MainSettings.CollectMessageStats = bool.Parse(data["Statistics"]["CollectMessageStats"]); MainSettings.StatsCollectionInterval = int.Parse(data["Statistics"]["StatsCollectionInterval"]); MainSettings.mainURL = data["Server"]["MainURL"]; MainSettings.TickDelay = int.Parse(data["Server"]["TickDelay"]); _logger.Warn("___TICK DELAY:" + MainSettings.TickDelay); MD5 mcalc = MD5.Create(); byte[] dbytes = File.ReadAllBytes("Domain.dll"); MainSettings.ServerHash = mcalc.ComputeHash(dbytes).ToHex(false); _logger.Info($"Server domain hash: {MainSettings.ServerHash}"); //preload domain var type = typeof(ISceneActor); if (type == null) { throw new InvalidProgramException("!"); } //load plugins // BehaviourManager.LoadBehaviours(MainSettings.BehavioursPluginPath); //get config (app.config) AkkaConfigurationSection section = (AkkaConfigurationSection)ConfigurationManager.GetSection("akka"); //_logger.Info(); Config aconfig = section.AkkaConfig; Config localConfig = ConfigurationFactory.ParseString("akka.remote.helios.tcp.hostname = " + MainSettings.mainURL) .WithFallback(aconfig); //попытаться запустить актер сервера try { _system = ActorSystem.Create("VirtualFramework", localConfig); } catch (Exception ex) { _logger.Error(ex.Message); throw; } // на случай разрыва соединения DeadRequestProcessingActor.Install(_system); _databaseAgent = _system.ActorOf(Props.Create(() => new MongoDbActor()), "DataBase") .Cast <DatabaseAgentRef>(); //TODO: Add test for connection _terminal = _system.ActorOf(Props.Create(() => new TerminalConnection(_databaseAgent)), "Terminal") .Cast <TerminalConnectionRef>(); _serverConnection = _system .ActorOf(Props.Create(() => new ServerConnection(_databaseAgent)), "ServerEndpoint") .Cast <ConnectionRef>(); //_databaseAgent.SetDummyObjectTest().Wait(); _manager = _system .ActorOf(Props.Create(() => new ObjectsManager(_databaseAgent, _serverConnection)), "ObjectManager") .Cast <ObjectsManagerRef>(); //Editor _editorConnection = _system.ActorOf(Props.Create(() => new EditorConnection(_manager, _databaseAgent)), "EditorConnection") .Cast <EditorConnectionRef>(); //assets host _webApiHost = _system .ActorOf(Props.Create(() => new WebApiHost(MainSettings.WebApiHost, _databaseAgent, _manager)), "AssetsHost") .Cast <WebApiHostRef>(); _pluginsHost = _system.ActorOf(Props.Create(() => new PluginsHost(_databaseAgent, _manager)), "PluginsHost") .Cast <PluginsHostRef>(); // _pluginsHost.LoadPlugins().Wait(); _manager.LoadAllScenes().Wait(); return(true); }
public EditorConnection(ObjectsManagerRef omanager, DatabaseAgentRef database) { _objectsManager = omanager; _database = database; }