Coronium - Community Roundtable

Hi,

As some may know, the original Coronium Server was largely shaped from community input. It has been little over 3 years since that release and the app services landscape has changed dramatically, with a 3rd party service for about anything you could imagine. I’m looking to start an open discussion about what possible Coronium solutions would be beneficial to your Corona development needs, and also discuss the solutions currently in development.

The Big Picture

If you’re new to the Coronium platform, what follows is an overview of the Coronium philosophy.

The What

Coronium, the word, is an overarching title (or brand I suppose) of solutions that enable you to expand your applications into the cloud space. Where other services may support Corona among other clients, Coronium solutions are specifically created to work with Corona applications. In particular, Coronium solutions use Lua on the server-side when scripting is required. This enables you to use the same language both in your app, and in the cloud. In some sense, Coronium is to app services development, as Corona is to app development.

The Why

So why would you want to use Coronium over other services? The main reason, besides ease-of-use, is the ability to “own” your services and data. The fact is that 3rd party solutions come and go, which can wreak havoc if your applications depend on them. And they can be big players too. 

As an example, after building a giant user base, the infamous Parse service (owned by Facebook) was discontinued, leaving a huge amount of developers scrambling for replacement solutions. And while Google and Amazon may not suffer this fate, it can at times be difficult to not only implement those services, but development can be tricky, often times requiring a “bridging” server that you must implement yourself, with languages you may not be familiar with. Let alone the task of properly scaffolding the server itself.

The How

All Coronium solutions are built with a few main principles in mind, these being; easy to use APIs, the ability to use Lua for development, out-of-the-box full server deployments, and detailed documentation. Additionally, all Coronium solutions are built upon industry standard platforms and tools. The idea is to remove as much friction as possible, while providing powerful tools for extending your Corona applications beyond the device. And again, you “own” the services and data, removing any doubt as to the sustainability of 3rd party integrations.

As an example, the soon-to-be released Coronium Core not only supports users, data, files, image manipulation (and more), but also includes a plugin system to “bridge” into other services like email and push. The core plugins will always try to support the best free services that are available. For instance, the core email plugin currently supports Mailgun, with 10,000 free emails a month. In the event that Mailgun were to be discontinued, a new core plugin would be released, and in most, if not all cases, you would need to change nothing, except establishing an account with the new service. Other developers can also create and share plugins, built easily with Lua, and even have them compiled into the core if found popular among other users.

This brings me to one of the most important aspects of Coronium based solutions, which is community involvement. Coronium has always been driven heavily by the Corona community. Every voice is heard, and every suggestion is considered, with the goal of creating finely tailored solutions for the Corona developers. When you adopt Coronium as a platform, you gain unprecedented access to help shape the products, not only for your personal needs, but for the community at large.

The Roadmap

The recent releases of both Coronium SkyTable and Coronium ChatterBox are meant to be no-to-low management solutions for specific use cases, and require no server-side scripting. But, for more advanced needs, the following solutions are soon to be released.

Coronium Core

Coronium Core is a complete rebuild of the functionality found in the original Coronium Server (and more). Nearly 2 years in the making, it is a robust one-stop server-side solution for Corona applications that need cloud support. Generally these applications are more in the business category, but games can benefit as well. As mentioned above, Coronium Core supports users, data, files, image handling (and more), with an open plugin system, allowing the community to contribute to its feature set. The API is deep, and of course all of it is scriptable using the Lua you know and love.

Coronium Versus

Coronium Versus is a real-time, multiplayer, turn-based, authoritative game server. Authoritative game servers allow you to script your game logic in the cloud, which not only makes cheating difficult, but eases the pain usually associated with multi-player games which are driven by the client. Issues like data synchronization and client negotiation are easily handled in an authoritative environment. These types of solutions are generally expensive, and rarely allow the ability to be scripted using Lua. Coronium Versus benefits from years of refinement, is robust, and deploys literally in minutes. Developing your logic on the server-side using Lua is ridiculously simple.

The Roundtable

While the solutions listed above are on the way, the functionality is always open to community suggestions, and more importantly their use cases. If you have specific needs, please share them. If you have a specific type of solution you are looking for, drop it in this topic, everything is considered.

In closing, I would like give a hearty “thank you” to those who use, have used, and (hopefully) will use Coronium solutions for your cloud needs. The feedback, support, and community involvement over the years have been crucial in creating these solutions, and confirms that not only do they actually work as intended :slight_smile: but more importantly, they provide useful functionality for Corona developers. 

-dev

Excited to hear more about Coronium Core! 

What about Coronium Push. It would be cool to send push notification via your own server for absolute control

While aware of Coronium, I’ve stayed away from it due to a lack of understanding of the server side. 

I did purchase and setup SkyTables with Digital Ocean, solely because the documentation was good and Digital Oceans cost was clear (and cheap). AWS always concerned me as I was worried about open ended costs IF I ever got a popular app or badly coded something.

If these products work on a similar architecture then I will definitely be interested in the core.

I’ll second push notifications.  I’m currently searching for a provider that will allow me to silently push a notification from one device to another target device and react without user interaction.

I missed this thread.  It came out during a period when the forums auto-mailer wasn’t sending emails as happens occasionally.

I will have feedback tonight.  Meanwhile… folks  please respond with thoughtful and detailed notes.

If you are on a tight budget and considering doing any MP or other work that would need a server Coronium will be a godsend.  I know from past experience.  So, help Chris make decisions on this.

The fact that Chris is looking for feedback Coronium is the best news I’ve gotten for a while!

@dev,
 
 
My Coronium Background/Experience
First, to hear you talk about Coronium and see that you’re looking for input is super awesome.
 
Second, my primary experience with Coronium came from using ‘Coronium Cloud’ to implement a few apps and this game (co-authored with Mike Hempfling of Crave Creative):
https://itunes.apple.com/us/app/picture-perfect-memory/id997082735?mt=8 
 
‘Corona Cloud’ had a number of features that I found very useful and a few I wanted to use, but which didn’t work for me or were missing a feature:
 
Top Features I Used

  • Lua Scripts On Server - In essence, one could write scripts to do work on the server that were entirely written in Lua.  i.e. No need to learn another scripting language.  This was AWESOME! and saved a ton of effort.
  • MongoDB API - ‘Coronium Server’ supported SQL and Mongo, but time and time-again MongoDB was my go to solution for storing data as it more closely matched the Lua Table concept.
  • Beautiful Management Console - The console for managing your databases, rebooting, etc. was awesome.
  • Tasks (wrong name) - There was a system that would run scripts on an arbitrarily timed basis.  I used this to generate daily challenges, change game themes, and to do bookkeeping on on-going player-versus-player games.
  • Easy Peasy Lemon Squeezy - You provided ready-to-go base images for AWS and Digital Ocean (yay!)  Getting started was an issue of about 20 minutes once you’d done it a few times.
    • _ Tip: _ I also later realized you could use these images on a locally running instance of Linux in a virtual machine.  Thus testing and development could be done entirely on the local machine assuming you knew how to use Virtual Box or another virtualization system.

Features I Wanted To Use and Why I Couldn’t

  • Script Caching - For some reason, when I cached scripts, the MongDB interface would occasionally encounter an issue with cursors and crash the server.  I fought with this for some time, but ended up just leaving the servers in ‘JIT compile’ mode (wrong name for it, but I think you will know what I mean).
  • Saving Files - You could upload files to the server and get back a link to that file.  This was great!  However, things I also needed and couldn’t figure out how to do were:
    • Delete a file.
    • Replace a file but keep the same link.
  • e-mail - The server allowed one to send emails from the server to any desired destination.  I had no problem sending the emails, but most recipients’ email clients marked them as SPAM.  (I mainly used this to send users forgotten passwords).
    • This was probably my fault because I was sending the emails from an anonymous server and couldn’t figure out to properly sign the emails so they would not get rejected as SPAM.
    • I only mention this because you might have insights for future updates to make this work better.
  • MongoDB Find and Related Searches - This worked OK for small returns, but when you had 100’s to 1000’s of records matching the criteria, it was very hard to split the results.
    • i.e. I wanted to get the first 100 matching records, then the second 100, third 100, …   
    • There was a way to limit the number of returned results, but I couldn’t figure out how to find the next set after those returned.
    • This was probably a ‘cursor’ thing I just didn’t understand.

Answers To Your Questions
 
Why Would I Use Coronium

  • Very functional.
  • Very Performant
  • Provides almost all features I need (see ‘Features I Wanted …’ above).
  • (Far) Easier to use and (way) more flexible than any service I’ve tried or investigated.
  • Total control of server.
  • Ability to dig in to source on server if needed. 
  • Cheap - Coronium on my own server was always an order of magnitude cheaper than any 3rd party paid solution.

How Would I Use It
I would primarily use Coronium to:

  • Manage Data for players (Skytable is great for the simplest cases of this) in SP and MP Games.
  • Manage sharing data between users in a ‘shared experience’ i.e. 2+ players in a game private just to the invited participants.
  • Host DLC.
  • Host dynamic game content.
  • Host user created content, both private and shared.
  • Manage user logins and passwords.
  • Implement chat (Chatbox rocks this, but I might need support the ability to be in both both ‘rooms’ and ‘worlds’ for bigger games).
  • Host and manage daily challenges and similar ‘generated’ / ‘randomized’ world visible content.
  • … more

While mailgun is a great plugin, it would be great to send mail via our own server versus a 3rd party server. 

Also, a time api on a lua server would be great because I like current time for deleting old database entries. 

This is great news Chris,

I’ve been using Coronium cloud for a year and a half for 2 tourism apps and it as works flawlessly both in term of robustness and stability. Our company prefer DigitalOcean which offer better control of cost than Amazon EC2. We have been burned a few times with Amazon EC2 for huge cost and poor performance server.

We’ve been using almost all features of Coronium cloud and the lua server script is key for us as it solve many problems in terms of synchronization of devices, etc. Keep this one please.

Our only problems and it was a big one was the file management in Coronium Cloud. Storing on Digital Ocean is not efficient for us. Amazon S3 is a clear leader in terms of speed and cost. If you could have Coronium Core to use S3 to save/load file it will be amazing. Offering also a richer API, to replace and delete file would also be welcome. One last API request for S3 file management would be able to set the expiration tag for file upload as this is a great way to reduce the number of files on S3.

On a dashboard side, having a stronger features set to edit/search mondodb records would be great, but this is not a p1. In our case we have build an admin Corona App for the data management.

Regards,
Nick

Hi,

Thank you all for the feedback so far. It’s very, very helpful.

S3 has been on the short list for awhile, especially now that I have the AWS auth figured out via Lua. Push of course is always a need, so will be working on a framework for that as well, though it will most likely be part of Coronium Core.

I really appreciate you all taking the time to respond.

-dev

Thanks Chris. Btw what I mean by push through Coronium I mean not using a 3rd party service like pushbots but directly through coronium.

Hey Chris,

I am interested in Coronium as a teacher for educational apps. I am specifically interested in making network based apps like Kahoot! or Quizizz.   Both of these are fine apps, but I’d like to be able to do things with my students that these apps can’t do.  Both apps are web based, support multiple users (students), are centrally managed via web page (by the teacher).   I love the fact that I can have 40 students competing with each other while I manage the whole thing.

I created an app with an earlier version of Coronium called SimplyData (https://play.google.com/store/apps/details?id=com.thinkatorium.simplydata&hl=en).   I used it to allow my statistics students to input their individual data and then be able to see everyone’s data.   The app works pretty smoothly.

So, here is what I am asking for:

  • An easy way to connect back end to dynamic web pages

  • I don’t even care if I had to switch over to Python for the web pages

  • I’d just like to have it so the the various app clients could all access the same MySQL (or Mongo) database and so could the dynamic web pages

  • Also, some degree of realtime would be necessary here.  If you ever get a chance to try Kahoot! or Quizizz, you’ll see that there is very little lag (and I find that to be true even with 40 kids using it at once, in my classroom, with various devices)

That’s my two cents.  Thanks for listening as always!

Michael

+1 with that. I would love to be able to use a server for hosting a website and coronium

Chris, this is exciting news!  I’m thrilled to hear about your planned expansions for the Coronium universe.  I fall into the category of people who went with Parse because it looked unsinkable but was then left floundering.  I switched to Coronium on Digital Ocean and was pleased with the results.

Why would I use Coronium?

Lua based

Easy to implement and maintain

I can run my own server - giving me more control and saving money

How would I use Coronium?

My apps need to store and reference JSON files

I would like to generate PNG’s from my apps and load them onto the server

I’m hoping to implement a trading system between my users.  I’ve been looking into PlayFab and GameSparks to do this but would much rather have control of it on my own server - especially if I can use Lua for the server-side scripting.

Thanks again Chris!

Jonathan

Hi Chris, I do hope you expand the Coronium features as much as possible.  In my case I miss database off-line management with automatic synchronization among server and several clients when connection is back to online. Because of this I had to stop working with Coronium and started a long journey with OpenResty in native mode using Redis Database (in server and local clients) in order to implement such synchronization solution based on UTC conflicts resolution. If you add this feature in the Coronium Roadmap (it can be in MongoDB instead of Redis), it will be a huge PLUS ! 

Thanks a lot for your nice work,

Filgs

Hi Chris,

This sounds awesome! I am new to Corona and Lua and I am enjoying the well documented Getting Started guide. My background is in web development and I am interested in developing a real-time multiplayer mobile racing game (similar to Fun Run). I am new to server side scripting with regards to game servers/backends.

I have been looking at:

AppWarp Corona SDK Color Move Sample

From what I know, these services can handle matchmaking, real-time chat, leaderboards, in-game characters (player data, virtual currency, inventory, statistics), handle spikes in traffic on the server end, handle some authority/security (GameSpark Features and PlayFab Features). Are these the features we can expect to get from Coronium Versus? I’m not expecting it to be fully packed right out of the gate but is it right to look at Coronium Versus as a replacement for these 3rd party services?

Also, I was looking at Coronium ChatterBox and its description said it could be used for real-time multiplayer games. Should I look into that or wait for Coronium Versus? I am hoping to release my game in 6-12 months from now.

As for my use cases, here are things I would like my real-time multiplayer game to do:

  • Users get matched with other users (4 players total)
  • Once 4 players joined the room then the race scene starts and obstacles will be randomly generated in the game and move from right to left on the screen (same obstacles on all 4 player’s screen)
  • User’s positions will need to be constantly updated on the other 3 player’s devices
  • Player’s could send preset messages that display on the screen but don’t need to be saved/stored anywhere
  • Users can compare high scores
  • Users will collect points which they can use to customize their character and/or purchase inventory goods

Sorry for the long post.

Cheers and thanks in advance.

Hi @elifares,

At this time, Versus is turn-based and only supports two player games. So this probably won’t work in your case. ChatterBox can be used as a messaging protocol and may be able to do what you need it to do, but lacks the other features you are looking for, though you may be able to implement some or most of them using SkyTable. But this might be work than just using one of the pre-made services.

Versus has a very specific use case; A two player, turned-based, authoritative server with a Lua API on the backend. In addition, it has a redis datastore. While Versus will most likely expand in its functionality over time, especially in the amount of players per game, I hesitate to recommend that you wait on that for your game development. Versus development is mostly being driven by a card game I am working on in my “spare” time, and thought the multi-player engine might be nice to release for others to use as well. 

I hope that helps answer some of your questions. As Versus gets closer to release I’ll be providing more information on its feature set, and talk with the community about future enhancements if there is an interest in the engine. Writing an engine like this is not trivial, so I’m working on it in phases. ;)  

Thanks for your interest in Coronium!

-dev

@flig.s - I have been playing around with some ideas for this feature. Nothing solid yet, but I do think it would be an interesting thing to add. I’ll keep you posted.

@michael714 and @Scott Harrison - Take a look at the Pages module in Coronium Core. Hopefully that can do what you need.

Thanks again for the suggestions.

-dev

@dev can we set index for site? I mean it would be cool if we could just have one server for game hosting and website. I mean it cool that you can make sites in the /sites folder.