During a 5 week period under my specialization course in school, I decided to take on the challenge of creating a network system and designing the website you are currently looking at. Throughout the process, I learned a great deal about networking, web development, and project management.
To provide more insight into the process of making these two projects, I have added two separate segments where I talk a little more in-depth about my journey and the lessons learned.
My goal was to develop a networking system for my game engine that could work seamlessly across different platforms. To achieve this, I aimed to create an abstraction layer that would enable support for multiple networking APIs. Using Unreal Engine's replication system as a source of inspiration, I set out to develop a simpler version of their design specifically tailored for my game engine.Structure:
My goal was to create a simple yet efficient structure that would be user-friendly and easy to work with. To achieve this, I looked to Unreal Engine's source code for inspiration. I based my project structure on their approach, using a socket builder class to define the desired socket settings. The result of the socket builder is then passed to either SocketSender or SocketReceiver, each of which utilizes a separate thread to increase efficiency. For those interested in learning more about how to use these components, I have attached a couple of images at the bottom of the page to provide a better understanding.Abstraction layer:
Having watched The Cherno's game engine series
on YouTube, I gained valuable insights into how to structure a game engine for maximum flexibility and scalability. I learned how to avoid limiting myself to a specific tool or workflow and instead create a system that could easily adapt to changes. Applying these principles, I set out to develop a networking system that could support multiple APIs, providing me with an opportunity to expand my knowledge and experience in this area.
As for the design and development of my website, I made a conscious decision to create it on my own, without relying on online editors like Wix, SquareSpace, or Webflow. My motivation for doing so was rooted in a desire to learn new technology and expand my skills beyond C++ and game development. I saw this as an opportunity to dive into web development and broaden my knowledge in this area. I found the process to be highly rewarding, as it allowed me to push my boundaries and gain valuable insights into a new field of technology. Design:
To design my website, I opted to use NextJS
with Typescript and TailwindCSS
To deploy my website, my initial plan was to use Google Cloud Platform (GCP)
as it was something I had been wanting to learn for a while. After successfully deploying my website to GCP, I realized that I still needed more time to experiment and learn more about their tools before feeling completely comfortable with using their services. Therefore, for the time being, I decided to containerize my website using Docker
and host it on my own server at home. To streamline the deployment process, I also set up a simple CI/CD pipeline using GitHub Actions which allows me to easily deploy new changes. In the future, I hope to give GCP another try once I have gained more experience and knowledge with their platform.