My Project
Loading...
Searching...
No Matches
kernel_chat.c File Reference
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdarg.h>
#include "kernel_smartptr.h"
#include "kernel_uniqueptr.h"
#include <fcntl.h>
#include <pthread.h>
#include <time.h>

Go to the source code of this file.

Classes

struct  ClientInfo
 클라이언트 정보를 담는 구조체 More...
 

Macros

#define DEFAULT_TCP_PORT   5100
 
#define MAX_CLIENTS   10
 main 함수
 
#define BUFFER_SIZE   1024
 
#define MAX_CLIENTS   10
 main 함수
 
#define BUFFER_SIZE   1024
 

Functions

void auto_daemon_mode ()
 자동 데몬화 모드 함수
 
void manual_server_mode ()
 수동 서버 관리 모드 함수
 
void list_users ()
 네트워크와 클라이언트 간의 채팅 처리 함수
 
void kill_user (const char *username)
 클라이언트를 강제로 퇴장시키는 함수
 
void kill_room (int room_id)
 클라이언트를 강제로 퇴장시키는 함수
 
UniquePtr create_unique_ptr (size_t size, void(*deleter)(void *))
 클라이언트 정보를 스마트 포인터로 관리하는 배열
 
int create_network_tcp_process (int num_tcp_proc,...)
 TCP 서버를 생성하고 클라이언트 연결을 처리하는 함수
 
void broadcast_message (int sender_fd, char *message, int room_id)
 특정 채팅방에 있는 모든 클라이언트에게 메시지를 브로드캐스트하는 함수
 
void log_chat_message (const char *message)
 서버 측에서 발생한 채팅 메시지를 로그로 저장하는 함수
 
void * client_handler (void *arg)
 클라이언트와의 통신을 처리하는 스레드 함수
 
void release_client (int sock)
 클라이언트 정보를 스마트 포인터로 관리하는 배열
 
void * server_input_handler (void *arg)
 서버 측에서 사용자 입력을 처리하는 스레드 함수
 
void send_server_message (char *message)
 서버 메시지를 브로드캐스트하는 함수
 
void add_new_client (int sock, int client_id, const char *username)
 클라이언트 정보를 스마트 포인터로 관리하는 배열
 
void daemonize ()
 daemonize 함수 구현
 
void logo ()
 
void kernel_chat (int num_args,...)
 네트워크와 클라이언트 간의 채팅 처리 함수
 

Variables

SmartPtr client_infos [MAX_CLIENTS]
 클라이언트 정보를 스마트 포인터로 관리하는 배열
 
pthread_mutex_t log_mutex = PTHREAD_MUTEX_INITIALIZER
 

Macro Definition Documentation

◆ BUFFER_SIZE [1/2]

#define BUFFER_SIZE   1024

Definition at line 15 of file kernel_chat.c.

◆ BUFFER_SIZE [2/2]

#define BUFFER_SIZE   1024

Definition at line 15 of file kernel_chat.c.

◆ DEFAULT_TCP_PORT

#define DEFAULT_TCP_PORT   5100

Definition at line 13 of file kernel_chat.c.

◆ MAX_CLIENTS [1/2]

#define MAX_CLIENTS   10

main 함수

Parameters
void
Returns
int

Definition at line 14 of file kernel_chat.c.

◆ MAX_CLIENTS [2/2]

#define MAX_CLIENTS   10

main 함수

Parameters
void
Returns
int

Definition at line 14 of file kernel_chat.c.

Function Documentation

◆ add_new_client()

void add_new_client ( int sock,
int client_id,
const char * username )

클라이언트 정보를 스마트 포인터로 관리하는 배열

Parameters
client_infos클라이언트 정보를 담는 스마트 포인터 배열
Returns
void

Definition at line 206 of file kernel_chat.c.

◆ auto_daemon_mode()

void auto_daemon_mode ( )

자동 데몬화 모드 함수

Parameters
void
Returns
void

Definition at line 622 of file kernel_chat.c.

◆ broadcast_message()

void broadcast_message ( int sender_fd,
char * message,
int room_id )

특정 채팅방에 있는 모든 클라이언트에게 메시지를 브로드캐스트하는 함수

Parameters
sender_fd메시지를 보낸 클라이언트의 파일 디스크립터
message브로드캐스트할 메시지
room_id메시지를 보낼 채팅방의 ID
sender_fd메시지를 보낸 클라이언트의 파일 디스크립터
message브로드캐스트할 메시지
room_id메시지를 보낼 채팅방의 ID
Returns
void

Definition at line 260 of file kernel_chat.c.

◆ client_handler()

void * client_handler ( void * arg)

클라이언트와의 통신을 처리하는 스레드 함수

Parameters
arg클라이언트 정보를 담고 있는 스마트 포인터 구조체의 포인터
Returns
void* 스레드 종료 시 반환값 (NULL)

Definition at line 323 of file kernel_chat.c.

◆ create_network_tcp_process()

int create_network_tcp_process ( int num_tcp_proc,
... )

TCP 서버를 생성하고 클라이언트 연결을 처리하는 함수

Parameters
num_tcp_proc생성할 TCP 프로세스 수
...서버의 IP 주소와 포트를 인자로 받습니다.
Returns
int 성공 시 0, 실패 시 -1 반환

Definition at line 392 of file kernel_chat.c.

◆ create_unique_ptr()

UniquePtr create_unique_ptr ( size_t size,
void(* deleter )(void *) )

클라이언트 정보를 스마트 포인터로 관리하는 배열

Parameters
client_infos클라이언트 정보를 담는 스마트 포인터 배열
Returns
void

클라이언트 정보를 스마트 포인터로 관리하는 배열

Parameters
size할당할 메모리 크기
deleter소멸자 함수
Returns
생성된 UniquePtr 구조체

Definition at line 89 of file kernel_uniqueptr.h.

◆ daemonize()

void daemonize ( )

daemonize 함수 구현

Parameters
void
Returns
void

Definition at line 559 of file kernel_chat.c.

◆ kernel_chat()

void kernel_chat ( int num_args,
... )

네트워크와 클라이언트 간의 채팅 처리 함수

Parameters
num_args가변 인자 개수 (서버 IP와 포트 전달)
...서버 IP 주소와 포트를 가변 인자로 전달

Definition at line 707 of file kernel_chat.c.

◆ kill_room()

void kill_room ( int room_id)

클라이언트를 강제로 퇴장시키는 함수

Parameters
username퇴장시킬 클라이언트의 사용자명
username퇴장시킬 클라이언트의 사용자명
Returns
void

Definition at line 180 of file kernel_chat.c.

◆ kill_user()

void kill_user ( const char * username)

클라이언트를 강제로 퇴장시키는 함수

클라이언트 정보를 스마트 포인터로 관리하는 배열

Parameters
username퇴장시킬 클라이언트의 사용자명
username퇴장시킬 클라이언트의 사용자명
Returns
void
Parameters
client_infos클라이언트 정보를 담는 스마트 포인터 배열
Returns
void

Definition at line 239 of file kernel_chat.c.

◆ list_users()

void list_users ( )

네트워크와 클라이언트 간의 채팅 처리 함수

클라이언트를 강제로 퇴장시키는 함수

Parameters
num_args가변 인자 개수 (서버 IP와 포트 전달)
...서버 IP 주소와 포트를 가변 인자로 전달

고유 포인터 구조체

참조 카운트가 1인 스마트 포인터로, 다른 스마트 포인터와 공유되지 않습니다.

Parameters
username퇴장시킬 클라이언트의 사용자명
Returns
void

Definition at line 152 of file kernel_chat.c.

◆ log_chat_message()

void log_chat_message ( const char * message)

서버 측에서 발생한 채팅 메시지를 로그로 저장하는 함수

채팅 메시지를 로그 파일에 저장하는 함수

Parameters
message저장할 메시지
message저장할 메시지
Returns
void

Definition at line 287 of file kernel_chat.c.

◆ logo()

void logo ( )

Definition at line 606 of file kernel_chat.c.

◆ manual_server_mode()

void manual_server_mode ( )

수동 서버 관리 모드 함수

Parameters
void
Returns
void

Definition at line 633 of file kernel_chat.c.

◆ release_client()

void release_client ( int sock)

클라이언트 정보를 스마트 포인터로 관리하는 배열

Parameters
client_infos클라이언트 정보를 담는 스마트 포인터 배열
Returns
void

Definition at line 224 of file kernel_chat.c.

◆ send_server_message()

void send_server_message ( char * message)

서버 메시지를 브로드캐스트하는 함수

Parameters
message서버에서 브로드캐스트할 메시지
Returns
void
Parameters
message서버에서 브로드캐스트할 메시지
argumentmessage 서버에서 브로드캐스트할 메시지
Returns
void

Definition at line 541 of file kernel_chat.c.

◆ server_input_handler()

void * server_input_handler ( void * arg)

서버 측에서 사용자 입력을 처리하는 스레드 함수

표준 입력으로부터 메시지를 받아 서버 메시지로 브로드캐스트합니다.

Parameters
arg미사용
Returns
void* 스레드 종료 시 반환값 (NULL)
Parameters
arg미사용
returnvoid* 스레드 종료 시 반환값 (NULL)
argumentarg 미사용
Returns
void* 스레드 종료 시 반환값 (NULL)

Definition at line 482 of file kernel_chat.c.

Variable Documentation

◆ client_infos

SmartPtr client_infos[MAX_CLIENTS]

클라이언트 정보를 스마트 포인터로 관리하는 배열

서버 메시지를 브로드캐스트하는 함수

Note
최대 MAX_CLIENTS 개의 클라이언트를 관리합니다.
Parameters
message서버에서 브로드캐스트할 메시지
argumentmessage 서버에서 브로드캐스트할 메시지
Returns
void

Definition at line 72 of file kernel_chat.c.

◆ log_mutex

pthread_mutex_t log_mutex = PTHREAD_MUTEX_INITIALIZER

Definition at line 280 of file kernel_chat.c.