/// <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());
        }