nihlus / crystite Goto Github PK
View Code? Open in Web Editor NEWCustom headless server for the VR sandbox Resonite
License: GNU Affero General Public License v3.0
Custom headless server for the VR sandbox Resonite
License: GNU Affero General Public License v3.0
Basically the headless cannot use websockets, they just dont connect
Resonite 2023.11.11.1231 added support for HTTP proxies. Crystite should support this as well using the stock configuration keys.
Quick note before I forget, #659, nice feature, implementable in Crystite, see sanoid
Add an option to periodically cleanup/reset the litedb database on certain conditions.
The ones I mostly care about are on startup, on repair flag set (due to database corruption detected on runtime).
just some endpoints to get account info (such as storage) for the headless user
1:58:29 INF] World [LBF] Hangout has been idle for 300 seconds, restarting
[11:58:29 INF] SessionID set to S-U-1Nd55iGqZ3Q:lbfhangout. LastModifyingUser:
[11:58:29 ERR] [B]Bind exception: System.Net.Sockets.SocketException (98): Address already in use
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at LiteNetLib.NetManager.BindSocket(Socket socket, IPEndPoint ep), errorCode: AddressAlreadyInUse
at System.Environment.get_StackTrace()
at Elements.Core.UniLog.Error(String message, Boolean stackTrace)
at FrooxEngine.LNL_Logger.WriteNet(NetLogLevel level, String str, Object[] args)
at LiteNetLib.NetDebug.WriteLogic(NetLogLevel logLevel, String str, Object[] args)
at LiteNetLib.NetDebug.WriteError(String str)
at LiteNetLib.NetManager.BindSocket(Socket socket, IPEndPoint ep)
at LiteNetLib.NetManager.Start(IPAddress addressIPv4, IPAddress addressIPv6, Int32 port, Boolean manualMode)
at LiteNetLib.NetManager.Start(IPAddress addressIPv4, IPAddress addressIPv6, Int32 port)
at LiteNetLib.NetManager.Start(Int32 port)
at FrooxEngine.LNL_Listener..ctor(String appId, UInt16 port, World world)
at FrooxEngine.LNL_Manager.CreateListener(UInt16 port, World world)
at FrooxEngine.NetworkManager.RequestAllListeners(UInt16 port, World world)
at FrooxEngine.Session.StartNew(UInt16 port)
at FrooxEngine.Session.NewSession(World owner, UInt16 port)
at FrooxEngine.World.StartSession(WorldManager manager, WorldAction init, UInt16 port, String forceSessionId, DataTreeNode load, Boolean unsafeMode)
at FrooxEngine.WorldManager.StartSession(WorldAction init, UInt16 port, String forceSessionId, DataTreeDictionary load, Boolean unsafeMode)
at FrooxEngine.Userspace.StartSession(WorldAction init, UInt16 port, String forceSessionId, DataTreeDictionary load, Boolean focusWhenReady, Boolean unsafeMode)
at FrooxEngine.Userspace.OpenWorldInternal(WorldStartSettings startInfo)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at FrooxEngine.Userspace.OpenWorldInternal(WorldStartSettings startInfo)
at FrooxEngine.Userspace.<>c__DisplayClass183_0.<<OpenWorld>b__0>d.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at FrooxEngine.Userspace.<>c__DisplayClass183_0.<OpenWorld>b__0()
at FrooxEngine.CoroutineManager.StartTask[T](Func`1 task, IUpdatable updatable)
at FrooxEngine.Worker.StartTask[T](Func`1 task)
at FrooxEngine.Userspace.OpenWorld(WorldStartSettings startInfo)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at FrooxEngine.Userspace.OpenWorld(WorldStartSettings startInfo)
at Crystite.Services.WorldService.StartWorldAsync(WorldStartupParameters startupParameters, CancellationToken ct)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Crystite.Services.WorldService.StartWorldAsync(WorldStartupParameters startupParameters, CancellationToken ct)
at Crystite.Services.WorldService.SessionHandlerAsync(SessionWrapper wrapper, CancellationToken ct)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
at FrooxEngine.CoroutineManager.ExecuteWorldQueue(Double deltaTime)
at FrooxEngine.Engine.UpdateStep()
at FrooxEngine.Engine.RunUpdateLoop()
at Crystite.StandaloneFrooxEngineService.EngineLoopAsync(CancellationToken ct)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
at System.Threading.PeriodicTimer.State.Signal(Boolean stopping, CancellationToken cancellationToken)
at System.Threading.PeriodicTimer.<>c.<.ctor>b__2_0(Object s)
at System.Threading.TimerQueueTimer.Fire(Boolean isThreadPool)
at System.Threading.TimerQueue.FireNextTimers()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
[11:58:29 ERR] Failed to start listener
at System.Environment.get_StackTrace()
at Elements.Core.UniLog.Error(String message, Boolean stackTrace)
at FrooxEngine.LNL_Listener..ctor(String appId, UInt16 port, World world)
at FrooxEngine.LNL_Manager.CreateListener(UInt16 port, World world)
at FrooxEngine.NetworkManager.RequestAllListeners(UInt16 port, World world)
at FrooxEngine.Session.StartNew(UInt16 port)
at FrooxEngine.Session.NewSession(World owner, UInt16 port)
at FrooxEngine.World.StartSession(WorldManager manager, WorldAction init, UInt16 port, String forceSessionId, DataTreeNode load, Boolean unsafeMode)
at FrooxEngine.WorldManager.StartSession(WorldAction init, UInt16 port, String forceSessionId, DataTreeDictionary load, Boolean unsafeMode)
at FrooxEngine.Userspace.StartSession(WorldAction init, UInt16 port, String forceSessionId, DataTreeDictionary load, Boolean focusWhenReady, Boolean unsafeMode)
at FrooxEngine.Userspace.OpenWorldInternal(WorldStartSettings startInfo)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at FrooxEngine.Userspace.OpenWorldInternal(WorldStartSettings startInfo)
at FrooxEngine.Userspace.<>c__DisplayClass183_0.<<OpenWorld>b__0>d.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at FrooxEngine.Userspace.<>c__DisplayClass183_0.<OpenWorld>b__0()
at FrooxEngine.CoroutineManager.StartTask[T](Func`1 task, IUpdatable updatable)
at FrooxEngine.Worker.StartTask[T](Func`1 task)
at FrooxEngine.Userspace.OpenWorld(WorldStartSettings startInfo)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at FrooxEngine.Userspace.OpenWorld(WorldStartSettings startInfo)
at Crystite.Services.WorldService.StartWorldAsync(WorldStartupParameters startupParameters, CancellationToken ct)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Crystite.Services.WorldService.StartWorldAsync(WorldStartupParameters startupParameters, CancellationToken ct)
at Crystite.Services.WorldService.SessionHandlerAsync(SessionWrapper wrapper, CancellationToken ct)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
at FrooxEngine.CoroutineManager.ExecuteWorldQueue(Double deltaTime)
at FrooxEngine.Engine.UpdateStep()
at FrooxEngine.Engine.RunUpdateLoop()
at Crystite.StandaloneFrooxEngineService.EngineLoopAsync(CancellationToken ct)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
at System.Threading.PeriodicTimer.State.Signal(Boolean stopping, CancellationToken cancellationToken)
at System.Threading.PeriodicTimer.<>c.<.ctor>b__2_0(Object s)
at System.Threading.TimerQueueTimer.Fire(Boolean isThreadPool)
at System.Threading.TimerQueue.FireNextTimers()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
Title says it all, but basically docker is pretty much the standard of deploying things on servers, so it would be nice if Crystite had docker support.
POST /worlds/{world-id}/invite/{user-id}
, or something along those lines. Alternatively, POST /contacts/{id}/invite
to send an invite for the currently focused world.
I tried to update Crystite server today but encountered this error:
The installed Resonite version (2024.2.5.848) does not match the version Crystite was compiled with (2024.1.3.1265)
There is no newer package
crystite is already the newest version (1.0.0+deb11~preview33).
The README recommends using the Debian repository at https://repo.algiz.nu/crystite
, but it looks like this repo's latest version is preview33 which is behind the latest preview41
If I manually ping the server with this, there appears to be nothing greater than preview33
curl -H 'User-Agent: Debian APT-HTTP/1.3' https://repo.algiz.nu/crystite/dists/bullseye/main/binary-amd64/Packages | grep Version
Make it possible to specify manifest id for specific version to download, and when it is not specified, automatically use the one that corresponds to the version of Resonite that Crystite was built against. This would also allow caching the manifest so that steam API doesn't need to be queried for latest version.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.