# server The server implementation is as simple as I could make it. I found a library called mod_dill from the [tcp-client-server demo code](https://github.com/modern-fortran/tcp-client-server) from a book on modern fortran. This gave me a simple TCP interface to send and recieve "messages". Originally I had tried saving formatted fortran data into a string and trying to send that, but when you convert the fortran string to a c-string it oftend became garbled and unusable when sent through the tcp connection so I stopped using that method. I found in [fpm](https://fpm.fortran-lang.org/index.html) [official registry](https://registry-frontend.vercel.app/) a json library which would make it *much* easier to deal with data transfer. The simplest way to implement the communcation between the server and clients would be a series of tcp requests and responses. - request - int :: request_type - ping # 0 - login # 1 - logout # 2 - move # 3 - str(24) :: username - double :: x_pos - double :: y_pos - response - array :: records - str(24) :: username - str(24) :: color - double :: x_pos - double :: y_pos For each request, the same response is returned with is a list of the logged in users. The commands that can be sent to the server are logging in, logging out, moving, and the default "ping" which is essentially a noop from the servers pov. The server uses the same sqlite library as the [www implementation](../www/README.md). The server loop is: 1. listen for connection 2. read message from client 3. convert c string to fortran string 4. convert the fortran string to a json object 5. run the command from the json object 6. create a json array of the logged in users and send to client.