#include <winsock2.h>
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include <stdio.h>
#include "resource.h"
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib,"comctl32.lib")
#define WM_SOCKET WM_USER+5
HINSTANCE hinst;
HWND hDlg;
HICON icon;
CHARFORMAT2 Format;
CHARRANGE Selection;;
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN sin;
char data[255];
char recu[10000];
void connection_serveur();
void envoyer();
void recevoir();
void ajouter_message(LPCTSTR texte);
BOOL CALLBACK AppProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam);
// fonction gérant les message concernant la boite de dialogue principale
BOOL CALLBACK AppProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
hDlg = hdlg;
SetDlgItemText(hDlg, IDC_EDIT_RECU, "SendMessage, par melkior le necrarque.\r\n\r\n\r\n");
EnableWindow( GetDlgItem(hDlg, IDC_BUTTON_ENVOYER), FALSE);
icon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON_ROUGE));
SetClassLong(hDlg, GCL_HICON, (LONG)icon );
SetTimer(hDlg, 1, 2000, NULL);
break;
case WM_TIMER:
connection_serveur();
KillTimer(hDlg, 1);
break;
case WM_CTLCOLOREDIT:
if(GetWindowLong((HWND)lParam, GWL_ID) == IDC_EDIT_RECU)
{
SetTextColor((HDC) wParam, RGB(255,0,0));
}
break;
case WM_SOCKET:
{
switch(WSAGETSELECTEVENT(lParam))
{
case FD_CONNECT:
EnableWindow( GetDlgItem(hDlg, IDC_BUTTON_ENVOYER), TRUE);
icon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON_VERT));
SetClassLong(hDlg, GCL_HICON, (LONG)icon );
ajouter_message("connection établie\r\n\r\n");
break;
case FD_READ:
recevoir();
break;
case FD_CLOSE:
EnableWindow( GetDlgItem(hDlg, IDC_BUTTON_ENVOYER), FALSE);
icon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON_ROUGE));
SetClassLong(hDlg, GCL_HICON, (LONG)icon );
break;
}
}
case WM_COMMAND:
switch(wParam)
{
case IDC_BUTTON_ENVOYER:
envoyer();
break;
case IDCANCEL:
EndDialog(hDlg,0);
}
default:
break;
}
return 0;
}
// fonction principale, c'est la premiere executée
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
InitCommonControlsEx(NULL);
LoadLibrary("RICHED32.DLL");
hinst = hInstance;
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_CLIENT), hDlg, AppProc);
return 0;
}
void connection_serveur()
{
ajouter_message("Connection à Niconetx");
Sleep(1000);
ajouter_message(".");
Sleep(1000);
ajouter_message(".");
Sleep(1000);
ajouter_message(".\r\n");
Sleep(1000);
WSACleanup();
WSAStartup(MAKEWORD(2,0), &WSAData);
sin.sin_addr.s_addr = inet_addr("192.168.0.16");
sin.sin_family = AF_INET;
sin.sin_port = htons(4100);
sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
WSAAsyncSelect(sock, hDlg, WM_SOCKET, FD_CONNECT | FD_READ | FD_CLOSE);
connect(sock, (LPSOCKADDR)&sin, sizeof(sin));
}
void envoyer()
{
ZeroMemory(data, 250);
GetDlgItemText(hDlg, IDC_EDIT_ENVOI, data, 250);
send(sock, data, sizeof(data), NULL);
SetDlgItemText(hDlg, IDC_EDIT_ENVOI, "");
strcat(data, "\r\n");
ajouter_message(data);
}
void recevoir()
{
ZeroMemory(data, 250);
recv(sock, data, sizeof(data), NULL);
strcat(data, "\r\n");
ajouter_message(data);
}
void ajouter_message(LPCTSTR texte)
{
ZeroMemory(recu, 10000);
GetDlgItemText(hDlg, IDC_EDIT_RECU, recu, 10000);
strcat(recu, texte);
SetDlgItemText(hDlg, IDC_EDIT_RECU, recu);
UpdateWindow(hDlg);
ZeroMemory(&Format, sizeof(CHARFORMAT2));
Format.cbSize = sizeof(CHARFORMAT2);
Format.dwMask = CFM_COLOR;
Format.crTextColor = RGB(255,0,0);
Selection.cpMin = strlen(recu)-strlen(data);
Selection.cpMax = strlen(recu);
SendMessage(GetDlgItem(hDlg, IDC_EDIT_RECU), EM_EXSETSEL, 0, (LPARAM) &Selection);
SendMessage(GetDlgItem(hDlg, IDC_EDIT_RECU), EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &Format);
}