GithubHelp home page GithubHelp logo

kf6kjg / chattel Goto Github PK

View Code? Open in Web Editor NEW
4.0 3.0 1.0 232 KB

Chattel is an asset library for Halcyon-based virtual world grids

License: MIT License

C# 100.00%
library nuget nuget-package csharp mono halcyon assets opensim opensimulator

chattel's Introduction

Chattel

.NET/Mono library for accessing WHIP and CloudFiles based Halcyon assets

Appveyor Build Status
Nuget Version Codacy Badge

Chattel is a library for Mono/.NET programs designed to make accessing assets stored in asset servers such as WHIP or via Halcyon's CloudFiles integration simple and fast.

Chattel provides:

  • The ability to read and write assets.
  • Integration with the WHIP asset server.
  • Integration with Halcyon's CloudFiles asset server.
  • Asset servers can be set up in a series-parallel array.
  • Assets can be disk-cached for faster access.
  • Able to efficiently convert to and from WHIP-type and StratusAsset-type assets, in both object and serialized forms.
  • Chattel-AssetTools lib extends the included StratusAsset type to provide easy queries that don't require any extra external libraries.
  • Logging compatible with the majority of common .NET logging systems: your logging library will be detected and used.

How is Chattel different from InWorldz' whip-dotnet-client? Simple: whip-dotnet-client is a very low-level library designed to allow connection to a WHIP server, but it cannot decode the resulting stream into something useful - Chattel can. Chattel also takes this one step further and allows you connect to other asset servers that are not WHIP-based.

Series-parallel array of asset servers

Chattel allows you to query multiple asset servers at the same time, aka in parallel, with the first one to return the asset winning. It also allows you to specify within this parallel list asset servers that should be queried in series until one returns the requested asset.

The benefit of this arrangement only comes if your grid is growing and you've had to change asset servers. Let's assume that you started your grid with WHIP, but later spun up a CloudFiles server and ported all your assets to the latter, but your WHIP servers are there just in case some asset didn't get ported. With this set up you could specify that the CloudFiles servers should be queried first, then the old WHIP servers, by setting the CloudFiles server in series with WHIP.

Alternatively, let's say you had multiple grids with different asset servers, but your application requires that you be able to pull assets from all of them. Simply set each asset server in parallel. If some of those have legacy asset servers, set the legacy asset servers in series with their primaries.

There are many possibilities and use-cases enabled by this architecture.

Note that since reading and writing are handled by separate classes, you can configure a different array for writing assets than you use for reading them.

Installation

Simply use your NuGet package manager to install the latest release straight from the NuGet.org package built by the Appveyor integration.

Contributing

Open source contributions are very welcome - please follow the style you find in the code.

chattel's People

Contributors

kf6kjg avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

chattel's Issues

Asset store should attempt remote servers even if the local storage is full

I'm not certain I like my previous decision.

Yes, the user requested local storage AND remote servers. That said, when there are remote servers then there's still opportunity to synchronously try the remotes. You'll never get a retry, but if everything fails we can just report a failure. If a crash/shutdown happens during the remote server operation then the server fails to respond and the client should timeout or whatever.

As a user I'd like to be able to allow my users to specify parallel servers in the INI config

Currently the INI "Server" stanza parses a comma-delimited list and interprets the result as serial servers.

It would be highly beneficial to many of my projects to be able to specify parallel servers in that list. I recommend the following format: "," (comma) remains the serial server marker, add "&" (ampersand) as the parallel server separator. Comma is given a higher priority than ampersand. Of course white space is trimmed.

Example: "Adam,Beth&Charlie,Dirk" is parsed as "try Adam. If that fails, try both Beth and Charlie. If both fail, try Dirk."

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.