Пример #1
0
        public ObjectsManager(DatabaseAgentRef database, IConnection conn)
        {
            _logger   = LogManager.GetLogger("[Objects Manager]");
            _database = database;
            _conn     = conn;

            _logger.Info("is online");
        }
Пример #2
0
 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");
 }
Пример #3
0
        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;
        }
Пример #4
0
        /// <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());
        }
Пример #5
0
        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);
        }
Пример #6
0
 public EditorConnection(ObjectsManagerRef omanager, DatabaseAgentRef database)
 {
     _objectsManager = omanager;
     _database       = database;
 }