/*
EIBD eib bus access and management daemon
Copyright (C) 2005-2007 Martin Koegler <mkoegler@auto.tuwien.ac.at>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <unistd.h>
#include "server.h"
#include "client.h"
Server::~Server ()
{
TRACEPRINTF (t, 8, this, "StopServer");
Stop ();
for (int i = 0; i < connections (); i++)
connections[i]->StopDelete ();
while (connections () != 0)
pth_yield (0);
close (fd);
TRACEPRINTF (t, 8, this, "Server ended");
}
bool
Server::deregister (ClientConnection * con)
{
for (unsigned i = 0; i < connections (); i++)
if (connections[i] == con)
{
connections.deletepart (i, 1);
return 1;
}
return 0;
}
Server::Server (Layer3 * layer3, Trace * tr)
{
t = tr;
l3 = layer3;
}
void
Server::Run (pth_sem_t * stop1)
{
pth_event_t stop = pth_event (PTH_EVENT_SEM, stop1);
while (pth_event_status (stop) != PTH_STATUS_OCCURRED)
{
int cfd;
cfd = pth_accept_ev (fd, 0, 0, stop);
if (cfd != -1)
{
TRACEPRINTF (t, 8, this, "New Connection");
setupConnection (cfd);
ClientConnection *c = new ClientConnection (this, l3, t, cfd);
connections.setpart (&c, connections (), 1);
c->Start ();
}
}
pth_event_free (stop, PTH_FREE_THIS);
}
void
Server::setupConnection (int cfd)
{
}
syntax highlighted by Code2HTML, v. 0.9.1