본문 바로가기
GameMaker강좌[GMS2]/네트워크강좌

[게임메이커 강좌-네트워킹][GMS2] 채팅 프로그램 만들기-5-접속자 표시

by 타락카얀 2024. 12. 24.
728x90

 

 

GAME MAKER 강좌

 

KAYAN

 

 

 

 

 

 

◈ 접속자 표시

 

이번에는 접속자를 표시해봅시다.

 

(▲ 접속자)

 

 

먼저, 서버에서 우측 상단 화면에 채팅 참여자의 이름을 표시하도록 합니다.

 
obj_server 오브젝트 - Draw 이벤트
 
 
draw_set_font( font0 );
draw_set_halign( fa_left );
draw_set_valign( fa_top );
 
var t, c;
t = "채팅 예제 ( 서버 )"+$" IP:{ global.local_server_IP}"; ;
c = c_black; draw_text_color( 80, 16, t, c, c, c, c, 1 );
 
//---------- 접속자 정보
 
var _x, _y, _list, i, p;
_x = 580;
_y = 16;
//접속자 수
c = c_black; draw_text_color( _x, _y, "접속자 ( "+string( ds_list_size( global.socketlist )+1 )+" )", c, c, c, c, 1 );
 
//서버 유저 이름
_y = 48;
c = c_blue; draw_text_color( _x, _y, "[서버]["+string( global.playername )+"]( 나 )", c, c, c, c, 1 );
 
//클라이언트 이름
_y+ = 20;
if ds_map_exists( global.player_map, "player_order" ){
_list = ds_map_find_value( global.player_map, "player_order" ); //클라이언트 소켓 목록
 
for( i = 0; i < ds_list_size( _list ); i+ = 1; ){
p = ds_list_find_value( _list, i );
 
//플레이어 닉네임
if ds_map_exists( global.player_map, "player_"+string( p ) ){
 
t = ds_map_find_value( global.player_map, "player_"+string( p ) );
c = c_black; draw_text_color( _x, _y, t, c, c, c, c, 1 );
_y+ = 20;
 
}
}
}
 
//---------- 접속자 정보
 

 

서버에서는 서버 유저 정보(global.playername)가 자신(나)이 됩니다.

그리고 나머지는 서버에 접속한 클라이언트의 이름이 됩니다.

 

이제 클라이언트에서 우측 상단 화면에 채팅 참여자의 이름을 표시하도록 합니다.

 
obj_client 오브젝트 - Draw 이벤트
 
 
draw_set_font( font0 );
draw_set_halign( fa_left );
draw_set_valign( fa_top );
 
var t, c;
t = "채팅 예제 ( 클라이언트 )";
c = c_black; draw_text_color( 80, 16, t, c, c, c, c, 1 );
 
 
//---------- 접속자 정보
 
var _x, _y, _list, i, p, n;
_x = 580;
_y = 16;
 
 
//접속자 수
user_count = 0;
if ds_map_exists( global.player_map, "player_order" ){
_list = ds_map_find_value( global.player_map, "player_order" );
user_count = ds_list_size( _list );
}
 
c = c_black; draw_text_color( _x, _y, "접속자 ( "+string( user_count+1 )+" )", c, c, c, c, 1 );
 
_y = 48;
if ds_map_exists( global.player_map, "player_order" ){
 
//서버 유저 이름
c = c_black; draw_text_color( _x, _y, "[서버]["+string( global.server_name )+"]", c, c, c, c, 1 );
 
 
//클라이언트 이름
_y+ = 20;
_list = ds_map_find_value( global.player_map, "player_order" ); //클라이언트 소켓 목록
 
for( i = 0; i < ds_list_size( _list ); i+ = 1; ){
p = ds_list_find_value( _list, i );
 
//플레이어 닉네임
if ds_map_exists( global.player_map, "player_"+string( p ) ){
 
t = ds_map_find_value( global.player_map, "player_"+string( p ) );
 
c = c_black;
if ( p == global.user_id ){ t+ = "( 나 )"; c = c_blue; }//현재 클라이언트인 경우
draw_text_color( _x, _y, t, c, c, c, c, 1 );
 
_y+ = 20;
}
}
}
 
//---------- 접속자 정보
 

 

서버는 클라이언트로 저장되어 있지 않기 때문에, 서버에 처음 접속했을 때 받아온 서버 유저(global.server_name)를 표시합니다.

잘 표시되는 지 확인해봅시다.

 

 

 

 

 

 

 

 

300x250

댓글