118 lines
2.7 KiB
C
118 lines
2.7 KiB
C
#include "client.h"
|
|
|
|
#include "../drivers/net/util.h"
|
|
|
|
#define SOCKET_ERROR -1
|
|
|
|
int cli_sendBuffer(Client* cli,void* pBuffer, unsigned int bufferlen)
|
|
{
|
|
int iResult;
|
|
ClientEventArgs e;
|
|
//abfragen ob client existiert!! wichtig
|
|
if (cli->sSocket != SOCKET_ERROR)
|
|
{
|
|
iResult= send(cli->sSocket,(char*)pBuffer,bufferlen,0);
|
|
if (cli->_OnWrite != 0)
|
|
{
|
|
e.dwLen = iResult;
|
|
e.pBuffer = pBuffer;
|
|
cli->_OnWrite(&e);
|
|
}
|
|
return iResult;
|
|
}
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
int cli_ConnectTo(Client* cli,char * pAdresse,unsigned short Port,int webAdresse)
|
|
{
|
|
ClientEventArgs e;
|
|
cli->sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Einen Socket erstellen
|
|
cli->wPort=Port;
|
|
cli->adAddr.sin_port = htons(cli->wPort);
|
|
|
|
|
|
if (webAdresse) //Fall es sich um eine Internet Adresse Handelt
|
|
return -1;
|
|
else //Fall es sich um eine LAN Adresse im 127.0.0.1 Stil handelt
|
|
cli->adAddr.sin_addr.s_addr = inet_addr(pAdresse);
|
|
|
|
if (connect(cli->sSocket,(const struct sockaddr*)&cli->adAddr, sizeof(cli->adAddr))==0)
|
|
{
|
|
|
|
create_kernel_task(&cli->bThread,cli_WaitForPacket,cli);
|
|
|
|
if (cli->_OnConnect != 0)
|
|
{
|
|
e.dwLen = 0;
|
|
e.pBuffer = 0;
|
|
cli->_OnConnect(&e);
|
|
}
|
|
return 0;
|
|
}
|
|
else
|
|
return -1;
|
|
};
|
|
|
|
int cli_DisconnectFrom(Client* cli)
|
|
{
|
|
shutdown(cli->sSocket,2);
|
|
closesocket(cli->sSocket);
|
|
cli->sSocket = SOCKET_ERROR;
|
|
return 0;
|
|
}
|
|
|
|
void cli_WaitForPacket(Client* cli)
|
|
{
|
|
int iResult=1;
|
|
char pTmpBuffer[DEF_BUFFERSIZE+1];
|
|
ClientEventArgs e;
|
|
|
|
while (iResult > 0)
|
|
{
|
|
iResult = recv(cli->sSocket ,pTmpBuffer, DEF_BUFFERSIZE, 0);
|
|
if (iResult > 0)
|
|
{
|
|
pTmpBuffer[iResult]='\0';
|
|
if (cli->_OnRead != 0)
|
|
{
|
|
e.dwLen = iResult;
|
|
e.pBuffer = pTmpBuffer;
|
|
cli->_OnRead( &e);
|
|
}
|
|
}
|
|
else //Verbindung geschlossen
|
|
{
|
|
cli->sSocket=SOCKET_ERROR;
|
|
if (cli->_OnDisconnect != 0)
|
|
{
|
|
e.dwLen = 0;
|
|
e.pBuffer = 0;
|
|
cli->_OnDisconnect( &e);
|
|
}
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
|
|
int cli_init(Client* cli)
|
|
{
|
|
|
|
cli->_OnConnect = 0;
|
|
cli->_OnWrite = 0;
|
|
cli->_OnRead = 0;
|
|
cli->_OnDisconnect = 0;
|
|
|
|
cli->adAddr.sin_addr.s_addr = INADDR_ANY; // IP'S die der Client annehmen soll
|
|
cli->adAddr.sin_family = AF_INET; // AdressFamilie (TCP/IP)
|
|
// adAddr.sin_port = htons(iPort); // Port auf dem der Client erreichbar seien soll
|
|
|
|
return NULL;
|
|
}
|
|
|
|
int cli_destroy(Client* cli)
|
|
{
|
|
closesocket(cli->sSocket);;
|
|
return NULL;
|
|
}
|