Code:
#include <windows.h>
#include <winsock2.h>
#include <fstream>
#include "definitions.hpp"
using namespace std;
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "DNMasterServer";
HWND hwnd, connectlog;
WORD sockVersion;
WSADATA wsaData;
int iResult;
SOCKET m_socket;
SOCKET AcceptSocket;
HANDLE connectthread;
char mstrmessage[2048];
void WaitConnection() {
while (1) {
AcceptSocket = SOCKET_ERROR;
while (AcceptSocket == SOCKET_ERROR) {
AcceptSocket = accept( m_socket, NULL, NULL );
}
m_socket = AcceptSocket;
send(m_socket, mstrmessage, strlen(mstrmessage), 0);
closesocket(m_socket);
closesocket(AcceptSocket);
SendMessage(connectlog, LB_ADDSTRING, 0, (LPARAM) "Master Message Sent...");
}
ExitThread(0);
}
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl))
return 0;
hwnd = CreateWindowEx (
0,
szClassName,
"Day and Night Master Server",
WS_OVERLAPPEDWINDOW | WS_MINIMIZE,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
480,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
ShowWindow (hwnd, nFunsterStil);
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
LPSTR szMessage = "Day and Night Master Server Program";
LPSTR szMessage2 = "Set Master Server Message:";
ifstream a_file;
ofstream myfile;
switch (message)
{
case WM_CREATE:
a_file.open("dnmstrsrvrmsg.txt", ios::in);
if(!a_file.is_open()) {
MessageBox(hwnd, "Failed to open file!", "Error!", MB_OK | MB_ICONSTOP);
}
while(!a_file.eof())
{
a_file.getline(mstrmessage, 2046);
}
a_file.close();
CreateWindow("Edit", mstrmessage, WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP | ES_MULTILINE, 32, 96, 320, 240, hwnd, (HMENU)ID_MESSAGE, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
CreateWindow("Button", "Submit New Message", WS_BORDER | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 112, 352, 150, 25, hwnd, (HMENU) ID_SUBMITNEW, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
connectlog = CreateWindow("Listbox", "", WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_BORDER | LBS_NOTIFY, 384, 128, 224, 208, hwnd, (HMENU) ID_CONNECTLOG, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
SendMessage(connectlog, LB_ADDSTRING, 0, (LPARAM) "Master Server Started...");
iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR ) {
MessageBox(hwnd, "Error initializing Winsock!", "Error!", MB_ICONSTOP | MB_OK);
exit(0);
}
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) {
MessageBox(hwnd, "Error at socket():", "Error!", MB_ICONSTOP | MB_OK);
MessageBox(hwnd, _itoa(WSAGetLastError(), NULL, 10), "Error!", MB_ICONSTOP | MB_OK);
WSACleanup();
exit(0);
}
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = INADDR_ANY;
service.sin_port = htons(19493);
if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
MessageBox(hwnd, "bind() Failed!", "Error!", MB_ICONSTOP | MB_OK);
closesocket(m_socket);
exit(0);
}
if ( listen( m_socket, 1 ) == SOCKET_ERROR ) {
MessageBox(hwnd, "Error listening on socket!", "Error!", MB_ICONSTOP | MB_OK);
exit(0);
}
connectthread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WaitConnection, NULL, 0, NULL);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
SetBkColor(hdc, 0x008500);
TextOut(hdc, 192, 16, szMessage, strlen(szMessage));
TextOut(hdc, 32, 64, szMessage2, strlen(szMessage2));
EndPaint(hwnd, &ps);
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case ID_SUBMITNEW:
char tempmessage[2048];
char checkmessage[] = "Are you sure you wish to change the Master Server Message to the following message:\n\n";
GetDlgItemText(hwnd, ID_MESSAGE, tempmessage, 2046);
strcat(checkmessage, tempmessage);
if(MessageBox(hwnd, checkmessage, "Change the Master Server Message?", MB_YESNO) == 6) {
GetDlgItemText(hwnd, ID_MESSAGE, mstrmessage, 2046);
myfile.open("dnmstrsrvrmsg.txt", ios::trunc);
if(!myfile.is_open()) {
MessageBox(hwnd, "Failed to open file!", "Error!", MB_OK | MB_ICONSTOP);
break;
}
myfile<<mstrmessage;
myfile.close();
}
break;
}
break;
case WM_DESTROY:
TerminateThread(connectthread, 0);
closesocket(m_socket);
closesocket(AcceptSocket);
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
Header File: