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!
I reached a major milestone today! The game server software suite is working again (now it’s all native 64-bit code) and successfully installed on the new server hardware. Today, I was finally able to login to the game world again for the first time in years! It felt good to see everything work, and to visit a ‘virtual’ place that I haven’t been to in a while.
I made some significant changes to the Gatekeeper code, to make it more robust and CPU friendly. There is more feedback to the system administrator as well. You might ask, “what is the Gatekeeper?” When the servers are down, the Gatekeeper is used to relay a message back to the client. Otherwise, the current authentication server connection details are returned to the client (i.e. the Been There Launcher application).
The only big problem I ran into was getting the packet data alignment and structure padding correct between the Linux and Windows applications. If you don’t already know, let me tell you, it’s a pain to troubleshoot custom network code! Everything else went pretty smooth, it was just a bunch of repetitive work and testing.
Finally finished working on this two-gripper robot. He is one of three in a machine that we recently programmed. I used some game AI on him, lol. He is pretty smart. The customer was pretty impressed.
Ok, so robots are fun to program. However, I’d rather be working on the Orion Engine right now! I do have some time-off coming up. I’m looking forward to digging into the engine code again!
I’ve been pretty busy at work lately, which has hindered my development on the engine some. However, I’m still pushing forward!
The plug-in system (used by the Orion Engine SDK, Orion Script, Orion Genesis, Been There Game, etc.) has been updated. The loader code is more robust now, and better handles invalid/outdated modules. There was a bug where an invalid module that was loaded would cause the application to give a warning and exit without the option to continue.
I’ve also been working on some of the tool applications. I fixed a bug in the OrionResultLookup application. Hexadecimal result strings were not always being properly converted to a signed result code. Thus, not all error codes could be successfully looked up. I also added an option where you can do a reverse lookup, i.e. select a result code such as “OE_S_OK” and the description, value, etc. will be displayed.
The monitor I use for my dev machine (a 52″ LCD Samsung T.V. LOL) started acting up the other day. It wouldn’t turn on, the standby relay just kept clicking. I can’t let this get in the way of development! It turns out, this is a common problem with my particular model of television. After a brief inspection, I found four electrolytic capacitors on the power supply board that had swollen up and leaked their electrolyte. No problem. I found suitable replacements for less than a dollar! Soldered them in and voilà! It works again, and still has a killer picture!