Курсовая работа: Создание сетевой игры
int
i=StrLen(CompName);
if(i>=50)
{
CompName[49]='\0';
}
unsigned long
cbWritten;
char BufExchange[50];
MyCurrNomMessage=1;
strcpy(BufExchange,"1;");
strcat(BufExchange,CompName);
WriteFile(SendMailslotHandle,BufExchange, strlen(BufExchange)+1,
&cbWritten, NULL);
}
}
//-----------------------прием
и accept-----------------------------------------
void __fastcall TMainForm::TimerMailSlotTimer(TObject
*Sender)
{
if(IsVisitApplicationBox)
return;
int rc;
unsigned long cbMessages,
cbMsgNumber, cbRead;
char *BufExchange;
rc =
GetMailslotInfo(ReceiveMailslotHandle, NULL, &cbMessages, &cbMsgNumber,
NULL);
if (!rc)
{
Application->MessageBox("Ошибка
GetMailslotInfo","Ошибка",MB_OK+MB_ICONHAND);
Application->Terminate();
}
if (cbMsgNumber == 0)
return;
BufExchange = new
char[cbMessages];
ZeroMemory(BufExchange,
cbMessages);
if
(ReadFile(ReceiveMailslotHandle, BufExchange, cbMessages, &cbRead, NULL))
{
int
HisCurrNomMessage;
char Buftmp[150];
strcpy(Buftmp,BufExchange);
HisCurrNomMessage=atoi(strtok(BufExchange,";"));
if(HisCurrNomMessage>HisPrevNomMessage)
{
HisPrevNomMessage=HisCurrNomMessage;
char *Buf;
Buf=AnsiStrScan(Buftmp,';');
Buf++;
if(IsServer
&& HisCurrNomMessage==1)
{
char
BufConnect[100];
sprintf(BufConnect, "\\\\%s\\mailslot\\msclient" , Buf);
SendMailslotHandle = CreateFile(BufConnect, GENERIC_WRITE, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
if
(SendMailslotHandle == INVALID_HANDLE_VALUE)
{
Application->MessageBox("Ошибка при открытии
mailslot","Ошибка",MB_OK+MB_ICONHAND);
Application->Terminate();
}
char
*strPered=DannieToChar(0,KolKub,MaxOch);
MailSlotSend(strPered);
InterfaceBeginNewGame();
ChangeInterfacePerehodHoda(1);
}
else
{
Priem(CharToMas(Buf));
}
}
}
delete [] BufExchange;
}
//------------------------отправка----------------------------------------------
void __fastcall
TMainForm::MailSlotSend(char *Buf)
{
unsigned long cbWritten;
char BufExchange[100];
MyCurrNomMessage++;
itoa(MyCurrNomMessage,BufExchange,10);
strcat(BufExchange,";");
strcat(BufExchange,Buf);
WriteFile(SendMailslotHandle,
BufExchange, strlen(BufExchange)+1, &cbWritten, NULL);
}
//----------------------разрыв
соединения---------------------------------------
void __fastcall
TMainForm::MailSlotCloseConnection(void)
{
CloseHandle(SendMailslotHandle);
CloseHandle(ReceiveMailslotHandle);
TimerMailSlot->Enabled
= false;
MyCurrNomMessage=0;
HisPrevNomMessage=0;
}
|