Skip to content

Instantly share code, notes, and snippets.

@XoLinA
Created April 9, 2026 20:29
Show Gist options
  • Select an option

  • Save XoLinA/225fdb42d022ace656ef84e1d96eea5c to your computer and use it in GitHub Desktop.

Select an option

Save XoLinA/225fdb42d022ace656ef84e1d96eea5c to your computer and use it in GitHub Desktop.
Menu
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#include <string>
#pragma comment(lib, "Ws2_32.lib")
#define PORT 54000
#define SERVER_IP "127.0.0.1"
#define BUF_SIZE 1024
using namespace std;
int main() {
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
inet_pton(AF_INET, SERVER_IP, &serverAddr.sin_addr);
cout << "Menu: Burger, Pizza, Salad, Soup\n";
string dish;
cout << "Enter your order: ";
getline(cin, dish);
sendto(sock, dish.c_str(), dish.size(), 0,(sockaddr*)&serverAddr, sizeof(serverAddr));
char buffer[BUF_SIZE];
sockaddr_in from;
int fromLen = sizeof(from);
int bytes = recvfrom(sock, buffer, BUF_SIZE, 0,(sockaddr*)&from, &fromLen);
if (bytes > 0)
{
buffer[bytes] = '\0';
cout << buffer << endl;
}
closesocket(sock);
WSACleanup();
}
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#include <queue>
#include <thread>
#include <chrono>
#include <ctime>
#pragma comment(lib, "Ws2_32.lib")
#define PORT 54000
#define BUF_SIZE 1024
using namespace std;
struct Order
{
string dish;
sockaddr_in clientAddr;
int addrLen;
time_t orderTime;
};
queue<Order> orderQueue;
struct Dish
{
string name;
int cookTime;
};
vector<Dish> menu =
{
{"Burger", 2},{"Pizza", 5},{"Salad", 1},{"Soup", 2}
};
int getCookTime(string dish)
{
for (auto& d : menu)
if (d.name == dish)
return d.cookTime;
return 2;
}
void cookOrders(SOCKET sock)
{
while (true)
{
if (!orderQueue.empty())
{
Order order = orderQueue.front();
orderQueue.pop();
int cookTime = getCookTime(order.dish);
cout << "[COOKING] " << order.dish << endl;
this_thread::sleep_for(chrono::seconds(cookTime));
time_t now = time(0);
int waitTime = now - order.orderTime;
string msg = "Your food is ready, enjoy!";
sendto(sock, msg.c_str(), msg.size(), 0,(sockaddr*)&order.clientAddr, order.addrLen);
cout << "[DONE] " << order.dish<< " | Wait time: " << waitTime << " sec\n";
}
}
}
int main() {
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = INADDR_ANY;
bind(sock, (sockaddr*)&serverAddr, sizeof(serverAddr));
thread cookThread(cookOrders, sock);
char buffer[BUF_SIZE];
while (true)
{
sockaddr_in clientAddr;
int addrLen = sizeof(clientAddr);
int bytes = recvfrom(sock, buffer, BUF_SIZE, 0,(sockaddr*)&clientAddr, &addrLen);
if (bytes > 0)
{
buffer[bytes] = '\0';
string dish = buffer;
cout << "[ORDER RECEIVED] " << dish << endl;
Order order;
order.dish = dish;
order.clientAddr = clientAddr;
order.addrLen = addrLen;
order.orderTime = time(0);
orderQueue.push(order);
}
}
closesocket(sock);
WSACleanup();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment