Skip to content

Latest commit

 

History

History
106 lines (93 loc) · 3.39 KB

File metadata and controls

106 lines (93 loc) · 3.39 KB

Include

Use

To use TTP2 in your project you need to include it in first.
After including TTP2 to your project you can start to program the server.

  1. Create a server tcp socket is set non blocking (SOCK_NONBLOCK):
    sockaddr_in serverAddress;
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_port = htons(PORT);
    serverAddress.sin_addr.s_addr = inet_addr(IP);
    
    int serverSocket = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
    if(bind(serverSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress)) < 0) {
       std::wcout << "Bind failed!" << std::endl;
       return -1;
    }
  2. TTP2 operates internally using epoll; therefore, client accepts should also be handled with epoll.
  3. Now you can create an instance of the ServerSessionController
    auto serverSessionController = std::make_shared<ServerSessionController>(serverSocket, clientSocket);
  4. Create a networkingSession thread
    std::thread networkingSession([serverSessionController]() {
      serverSessionController->networkingSession();
    });
  5. Take a look at the full implementation here

Done! It is almost the same with the client:

  1. Create a client tcp socket like such:
    int serverSocket = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
    
     sockaddr_in serverAddress;
     serverAddress.sin_family = AF_INET;
     serverAddress.sin_port = htons(PORT);
     serverAddress.sin_addr.s_addr = inet_addr(IP);
    
     int connectionResult = connect(serverSocket, (struct sockaddr*) &serverAddress, sizeof(serverAddress));
     
     if (connectionResult < 0 && errno != EINPROGRESS) {
         std::wcout << "Connection failed!" << std::endl;
         return -1;
     }
  2. Create an instance of the ClientSessionController
    auto clientSessionController = std::make_shared<ClientSessionController>(serverSocket);
  3. Create a networkingSession thread
    std::thread networkThread([clientSessionController]() {
      clientSessionController->networkingSession();
    });
  4. Take a look at the full implementation here

Now you can enjoy TTP2 with the functions provided below:

  1. Common:

    • void networkingSession();

    • bool isConnected()

    • void disconnect()

    • bool hasRequest()

    • bool hasResponse()

    • Packet popRequest()

    • Packet popResponse()

    • int getRequestQueueSize()

    • int getResponseQueueSize()

    • void pushResponse(Packet)

    • void pushRequest(Packet request)

    • int sendMessage(int socket, int id, int method, std::string payload)

    • int sendPacket(int socket, Packet packet)

    • Packet receiveMessage(int socket)

    • Packet

      struct Packet {
         int id;
         int method;
         std::string payload;  
      };
  2. ClientSessionController specific:

    • ClientSessionController();
    • ClientSessionController(int &socket);
  3. ServerSessionController specific:

    • ServerSessionController();
    • ServerSessionController(int serverSocket, int clientSocket);
    • std::string getLocalIpAddress(std::string interface);

Test

To test the TTP2 protocol you need to start the server first using:

nix run .#server

After that you can start the client with:

nix run .#client