I’ve created a Raspberry Pi Zero W device that I can use to monitor my servers. The software periodically checks to make sure the web server is responding, and all of the game servers in the cluster are accepting connections. I think I’ll add a little red flashing LED to signal there is a problem. I might even make a version with a larger OLED display, so I can display more details at once. Currently the device is meant to operate locally over Wi-Fi, however I could use my phone as a hotspot for the device while at remote locations.
Well, I’m still working on the network driver code for the engine. I just can’t seem to get everything exactly the way I want. Network code is just so hard to troubleshoot! However, I’m sure it will come together soon though.
I’ve been sick on and off with this stupid flu bug that has been going around. That makes it hard to get motivated to work. However, I’m finally starting to feel better. I’ve also been spending some time playing around with Raspberry Pi boards. There are so many cool things you can do with them! I’m making a small Raspberry Pi Zero wireless device to display the status of all my game servers. Sorta like a little pager I can carry around.
Well, it’s a new year already! I look forward to continue working on the Orion Engine SDK and the Been There Game software. I feel this is going to be a great, productive year!
I logged into the game servers again today. Everything is still working well… that’s awesome! I’ve been doing some experimenting with the network code and hope to have the final modifications complete soon.
Well, I finally have a fairly complete plan for the new network architecture. I’m hoping to fully utilize my Christmas break, by working on the code! I pray nothing at my day job comes up, that could steal my time away from the engine. I have nine servers running here, all waiting for me!
The last couple of weeks at work have kept me pretty busy. But I did manage to get some web site updates in, and to make some tweaks to the SDK tools. The Orion Gatekeeper has also undergone some changes. It’s more efficient now. I also upped the number of possible server destinations (i.e. worlds) that can be returned.
Something that has bugged me for a while is the current implementation of the network driver. It was never meant to be production code, rather just a foundation to test and work from.
The new implementation will use Windows Overlapped I/O with callback notifications, instead of polling for events and/or creating a bunch of threads. I plan to allow upwards of 10,000 connections per-server! So, I have to be very careful with how this is ultimately re-designed. I printed out some of the Orion Engine code for the network manager, and the network driver. I also printed out some of the Winsock documentation. I have my yellow hi-liter! I’m going to spread all of this out on a big table this weekend, and get really focused!
I have several domains and sub-domains that I like to have forwarded to various places on the Orion Engine site. For example, support.orionengine.com redirects to www.orionengine.com/support/. I used to use GoDaddy for this trivial service, but the performance and reliability has been going downhill over the years. I get the feeling they were trying to get me to upgrade to their premium DNS services. Now, I just have their DNS point all of my sub-domains to the same destination IP using CNAME entries. In addition, all of my domains also point to this IP address. These DNS entries will get replicated to other name servers, keeping me from relying totally on GoDaddy’s servers to forward links back to my site. Now, whenever my web server receives a request, it checks the host name that was used, and if it’s one of them that I would like to forward, it does a redirect. The new URL includes the path and filename that were originally specified. This seems to be working out really well. No more “Hmmm…can’t reach this page” error messages to my users!
Not very happy with the folks over at Newegg. I thought I would give them a chance on a recent purchase. I’ve never used them before. But now, I don’t think I will ever bother with them again. They wasted my time.
I placed an order with Newegg and they said my credit card was declined. So, I called my bank and they said there was no reason why it should have been declined. Thus, I had them retry my card again. It went through successfully this time; my bank said there was a hold on my account for the amount. After sitting all day idle, they freakin’ cancelled my order without warning! No phone call, no e-mail, no other warning! When I called them, they acted like it was a privilege that I could re-submit my order again. You must be kidding me!? You already had my money once, why did you refund it to my account and cancel my order? You really think I’m going to try that again? They should have admitted their error, and expedited my order for me. Now, I’m a day behind because they waited so long to tell me they weren’t going to ship it.
Oh yeah, and thanks for putting the hold on my account!
It’s time to upgrade the old router. I really need updated VPN capabilities, so I can access my network while offsite at hotels, etc. Even if the hotel is not directly blocking VPN ports, IPSec has trouble passing through some routers since it uses ESP, which is a port-less protocol. “IPSec pass-through” is a feature found on some routers, but this would only work for one client on the entire hotel LAN. Basically, the first person to make a connection would be the only one who could use it. I’m looking at using SSL VPN. Since this protocol does use ports (typically 443), it will more than likely be allowed through the public router, with proper address/port translation.
Finally just about finished with the Asset Manager. It’s been partially complete for a while now. Just enough to allow clients to self update from the server when they login.
Now I have an application that can be used for more robust asset revision control. It has the ability to get the latest assets from the server share, and to send the latest to the server. Only the data that needs to be sent over the network will be transferred. There is also the concept of a “live” folder, where the current game resources are held. This can be synchronized with the share folder, when it comes time to release a new game patch. The application can also generate a new file list for the setup program. It can also zip up the asset folder(s) for backup purposes. It’s going to make life a lot easier, especially when the number of assets continue to grow!
The old setup bootstrap used to implement a fairly old Visual C Runtime. This allowed it to run without any dependencies on the platforms that we were targeting. The new bootstrap is compiled using Visual C++ 2017. However, I’ve completely unlinked the requirement for the CRT/MSVCRT from the executable! It’s built using native code, much like a kernel would be built. This way, it will start up on just about any Windows platform, without any problems. The code had to be carefully written, to avoid any use of the common runtime, and the default libraries. In some cases, I had to provide my own implementations of functions like memset(). Now, I can ensure the latest version of the Microsoft Visual C Runtime (MSVCRT) is installed before my main setup program has been started.
I also recently finished a Self Extractor for the game download. It’s basically a .ZIP file appended to a custom extractor; i.e. a redistributable executable and the compressed archive of data in one file. The game used to be distributed as a .ZIP file only, but not everyone knew that you had to extract it, and then run the ‘Setup.exe’ found within the extracted folder. Much better now!