C-chat
server.h
Go to the documentation of this file.
1 
6 #ifndef C_CHAT_CLIENT_H
7 #define C_CHAT_CLIENT_H
8 
9 #include "../common/sockets.h"
10 #include "../common/constants.h"
11 #include "../common/threads.h"
12 #include "../common/packets.h"
13 #include "../common/synchronization.h"
14 
19 #define NUMBER_CLIENT_MAX 10
20 
21 struct Room;
22 
27 typedef struct Client {
36  short joined;
39 
40  // TODO: Implement in a better way
41  /* Upload */
42  struct {
43  unsigned int fileId;
44  long long fileSize;
45  long long received;
46  char* fileContent;
47  } uploadData[MAX_CONCURRENT_FILE_TRANSFER];
48  /* Download */
49  struct {
50  Thread downloadThread;
51  unsigned int downloadedFileId;
52  } downloadData[MAX_CONCURRENT_FILE_TRANSFER];
53 
64  struct Room* room;
65 } Client;
66 
67 typedef struct Room {
68  char name[ROOM_NAME_MAX_LENGTH + 1];
69  char description[ROOM_DESC_MAX_LENGTH + 1];
79  Client* owner;
80  ReadWriteLock lock;
81 } Room;
82 
83 extern ReadWriteLock clientsLock;
84 extern ReadWriteLock roomsLock;
85 extern Client* clients[NUMBER_CLIENT_MAX];
94 extern Room* rooms[NUMBER_ROOM_MAX];
95 
100 #define SYNC_CLIENT_READ(op) \
101 acquireRead(clientsLock); \
102 op; \
103 releaseRead(clientsLock);
104 
109 #define SYNC_CLIENT_WRITE(op) \
110 acquireWrite(clientsLock); \
111 op; \
112 releaseWrite(clientsLock);
113 
118 #define SYNC_ROOMS_READ(op) \
119 acquireRead(roomsLock); \
120 op; \
121 releaseRead(roomsLock);
122 
127 #define SYNC_ROOMS_WRITE(op) \
128 acquireWrite(roomsLock); \
129 op; \
130 releaseWrite(roomsLock);
131 
136 #define SYNC_ROOM_READ(room, op) \
137 acquireRead(room->lock); \
138 op; \
139 releaseRead(room->lock);
140 
145 #define SYNC_ROOM_READ(room, op) \
146 acquireRead(room->lock); \
147 op; \
148 releaseRead(room->lock);
149 
155 void handleServerClose(int signal);
156 
165 void handleClientsPackets(Client* client);
166 
167 #endif //C_CHAT_CLIENT_H
ReadWriteLock
A read/write lock to synchronize resource access.
Definition: synchronization.h:21
Room::clients
Client * clients[MAX_USERS_PER_ROOM]
Definition: server.h:78
Client::joined
short joined
Definition: server.h:36
Socket
Information of a socket.
Definition: sockets.h:19
USERNAME_MAX_LENGTH
#define USERNAME_MAX_LENGTH
Maximum length for a client username.
Definition: constants.h:23
Client::room
struct Room * room
Definition: server.h:64
NUMBER_ROOM_MAX
#define NUMBER_ROOM_MAX
The maximum of supported rooms.
Definition: constants.h:66
Room
Definition: server.h:67
Client::username
char username[USERNAME_MAX_LENGTH+1]
Definition: server.h:31
Client::thread
Thread thread
Definition: server.h:38
Thread
Represents a thread.
Definition: threads.h:44
Client::socket
Socket socket
Definition: server.h:29
handleServerClose
void handleServerClose(int signal)
Catch interrupt signal.
Definition: server.c:26
ROOM_DESC_MAX_LENGTH
#define ROOM_DESC_MAX_LENGTH
The maximum length for the description of a room.
Definition: constants.h:54
Client
A type representing a connected client.
Definition: server.h:27
ROOM_NAME_MAX_LENGTH
#define ROOM_NAME_MAX_LENGTH
The maximum length for a name of a room.
Definition: constants.h:48
MAX_USERS_PER_ROOM
#define MAX_USERS_PER_ROOM
The maximum amount of users connected simultaneously to a room.
Definition: constants.h:60
rooms
Room * rooms[NUMBER_ROOM_MAX]
Definition: server.c:24
MAX_CONCURRENT_FILE_TRANSFER
#define MAX_CONCURRENT_FILE_TRANSFER
Maximum concurrent transfer of file allowed per client.
Definition: constants.h:42
NUMBER_CLIENT_MAX
#define NUMBER_CLIENT_MAX
Maximum of simultaneous connected clients.
Definition: server.h:19
handleClientsPackets
void handleClientsPackets(Client *client)
Relay messages sent by given client to all known clients.
Definition: server.c:56