Inspiration
A lot of ticketing sites are kind of clunky, with a lot of extra things that you don't need. We wanted to make a more streamlined way to make seat reservations, without all of the extras. It was designed to be as easy as possible for the end-user to use with no extra hoops to jump through.
What it does
Movies++ is an iOS application that allows for viewing and reserving movie tickets. It allows you to add movie showings right from the app if authenticated via UUID, so you don't have to worry about dealing with any kind of direct database interfacing or clunky administration portal.
It supports multiple theaters, multiple movies, multiple showings of the same movie, and a full seat and ticket reservation system, allowing a user to pick a movie, date, and time, and choose their seats right from the app.
How we built it
The backend is a custom-built Python TCP server using the built-in socket library that controls a local sqlite3 database. The server has a variety of different commands to manipulate or retrieve information from the database, allowing a client to easily interface with it. A Swift application acts as the frontend, allowing us to use "write commands" to the server when necessary and use "get commands" when necessary to display information.
Challenges we ran into
At first, we didn't have a great way to actually store all of the different seating, as there was a lot of data there, so we decided to bitpack it, with the first bit being reservation state and the last seven being the seat number. That led to a lot of other issues with command parsing and taking a byte and turning it into a seat and vice/versa, as it was difficult to keep track of what was a byte, a string, or an integer internally. Eventually, we decided to create a new table that held all of the seats in all of the theaters, and was able to better manage everything from there.
One of the bigger challenges we faced was actually interfacing with the TCP server from the Swift application. The restrictions of the university's network stopped us from talking between each other's computers, and we would need a VPN to connect to the external hosting solutions we tried, including an AWS instance and a private server hosted by one of the team members. In the end, we ended up hosting the server and client on the same machine to avoid the problem.
What we learned
We learned more about networking with sockets, especially in Swift, as we had minimal knowledge of them prior. It allowed us to learn more about the send, recv flow TCP generally uses, and how to write our own or wrap around preexisting flows.
What's next for Movies++
- Better integration with client and server
- Move server to remote host
- User/pass-based authentication flow for improved security
GitHub link below is main repository, GitLab link is Swift repository, may be ahead of GitHub.
Log in or sign up for Devpost to join the conversation.