89 lines
2.0 KiB
C
89 lines
2.0 KiB
C
/** \file server/client.h
|
|
* Defines all the client data and actions.
|
|
*
|
|
* \note If you only need 'struct Client' to work with, you should use the
|
|
* following code (which does not create an indirect dependency on
|
|
* 'struct Screen'):
|
|
*
|
|
* \code
|
|
* #define INC_TYPES_ONLY 1
|
|
* #include "client.h"
|
|
* #undef INC_TYPES_ONLY
|
|
* \endcode
|
|
*/
|
|
|
|
/* This file is part of LCDd, the lcdproc server.
|
|
*
|
|
* This file is released under the GNU General Public License.
|
|
* Refer to the COPYING file distributed with this package.
|
|
*
|
|
* Copyright (c) 1999, William Ferrell, Selene Scriven
|
|
* 2002, Joris Robijn
|
|
*/
|
|
|
|
#ifndef CLIENT_H_TYPES
|
|
#define CLIENT_H_TYPES
|
|
|
|
#include "shared/LL.h"
|
|
|
|
#define CLIENT_NAME_SIZE 256
|
|
|
|
/** Possible states of a client. */
|
|
typedef enum _clientstate {
|
|
NEW, /**< Client did not yet send \c hello. */
|
|
ACTIVE, /**< Client sent \c hello, but not yet \c bye. */
|
|
GONE /**< Client sent \c bye. */
|
|
} ClientState;
|
|
|
|
|
|
/** The structure representing a client in the server. */
|
|
typedef struct Client {
|
|
char *name;
|
|
ClientState state;
|
|
int sock;
|
|
int backlight;
|
|
int heartbeat;
|
|
|
|
LinkedList *messages; /**< Messages that the client sent. */
|
|
LinkedList *screenlist; /**< List of client's screens. */
|
|
|
|
void* menu; /**< Menu hierarchy, if any */
|
|
} Client;
|
|
|
|
#endif
|
|
|
|
#ifndef INC_TYPES_ONLY
|
|
#ifndef CLIENT_H_FNCS
|
|
#define CLIENT_H_FNCS
|
|
|
|
#define INC_TYPES_ONLY 1
|
|
#include "screen.h"
|
|
#undef INC_TYPES_ONLY
|
|
|
|
/* When a new client connects, set up a new client data struct */
|
|
Client *client_create(int sock);
|
|
|
|
/* Destroys the client data */
|
|
int client_destroy(Client *c);
|
|
|
|
/* Close the socket */
|
|
void client_close_sock(Client *c);
|
|
|
|
/* Add message to the client's queue...*/
|
|
int client_add_message(Client *c, char *message);
|
|
|
|
/* Get message from queue */
|
|
char *client_get_message(Client *c);
|
|
|
|
/* Find a named screen for the client */
|
|
Screen *client_find_screen(Client *c, char *id);
|
|
|
|
int client_add_screen(Client *c, Screen *s);
|
|
|
|
int client_remove_screen(Client *c, Screen *s);
|
|
|
|
int client_screen_count(Client *c);
|
|
|
|
#endif
|
|
#endif
|