server/client

Dependencies:   mbed NetServicesMin

tcp_client.cpp

Committer:
recotana
Date:
2012-02-19
Revision:
0:432b571e11a3
Child:
1:6e61ee662fd3

File content as of revision 0:432b571e11a3:

#include "mbed.h"
#include "config.h"
#include "tcp_error.h"
#include "tcp_client.h"

extern IpAddr inCommingIp;

Host server;
TCPSocket sendSock;
ConnectStatus clientStatus;
Timer checkTimer;
Ticker clientCheck;

IpAddr clientIp;
int clientPort;

void onSendEvent (TCPSocketEvent e) {
    printf("... client event arrival!\n");
    switch(e)
    {
        case TCPSOCKET_CONNECTED: // Ú‘±Š®—¹
        {
            char str[]="connect!";
            sendSock.send(str,strlen(str) ); // ‘—M
            clientStatus=connected;
            printf("TCPSOCKET_CONNECTED!!\n");
            break;
         }

        case TCPSOCKET_WRITEABLE: // ‘—M‰Â”\i‘—MŠ®—¹j
        {
            printf("TCPSOCKET_WRITEABLE!!\n");
            clientStatus=connected;
            break;
        }

        case TCPSOCKET_READABLE: // ŽóMƒf[ƒ^‚ ‚è
        {   printf("TCPSOCKET_READABLE!!\n");
            clientStatus=connected;
            break;
        }
        case TCPSOCKET_CONTIMEOUT:
        {
            printf("TCPSOCKET_CONTIMEOUT!!\n");
            socketClose();
            break;
        }
        case TCPSOCKET_CONRST:
        {
             printf("TCPSOCKET_CONRST!!\n");
             socketClose();
            break;
        }
        case TCPSOCKET_CONABRT:
        {
             printf("TCPSOCKET_CONABRT!!\n");
             socketClose();
            break;
        }
        case TCPSOCKET_ERROR:
        {   printf("TCPSOCKET_ERROR\n");
            socketClose();
            break;
            
        }
         case TCPSOCKET_DISCONNECTED:
        {
            printf("TCPSOCKET_DISCONNECTED...\n");
            socketClose();
            break;
        }
    }
    printf("...client event out\n");
}

void clientInit(void){
    sendSock.setOnEvent(&onSendEvent);
    clientStatus=close;
}

int clientConnect(IpAddr ip , int port)
{
    if(clientStatus == connecting){
        printf("socket already connecting..\n");
        return 0;
    }
    else if(clientStatus == connected){
        printf("socket already connected..\n");
        return 0;
    }

    Host server(ip, port);
    
    TCPSocketErr err= sendSock.connect(server);
    if (err != TCPSOCKET_OK) {
        printf("connect Error. ");
        dispTcpError(err);
        clientStatus=close;
        return -1;
    }
    clientStatus=connecting;    
    return 0;
}

int tcpSend(char *data,int length){
 
    return sendSock.send(data, length);
    
}

void checkConnect(void){

    if(clientStatus != close) return;
    
    clientConnect( clientIp,clientPort );
    return;
}

void socketClose(void){
    sendSock.close();
    clientStatus=close;
}



void connectCheckStart(IpAddr ip , int port)
{
    clientIp=ip;
    clientPort=port;
    clientCheck.attach(&checkConnect,3);
    
}