⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 px_ss_ui.c

📁 MMORPG游戏服务器端架构及函数
💻 C
字号:
/* must been first include begin */
#include "..\ProjectX_Common\ProjectX_Copyright.h"
#include "..\ProjectX_Common\ProjectX_Common.h"
/* must been first include end */

/* std and common include */
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

/* program specify include */
#include "..\ProjectX_Common\ProjectX_MessageCode.h"
#include "..\ProjectX_Common\ProjectX_Shared.h"
#include "..\ProjectX_Common\ProjectX_Utils.h"
#include "px_ss_config.h"
#include "px_ss_state.h"
#include "px_ss_ui.h"
#include "px_ss_time_service.h"
#include "px_ss_statistic.h"
#include "px_ss_module_cl.h"
#include "px_ss_module_rs.h"
#include "px_ss_module_work.h"

/* variant define */
HANDLE							h_console = NULL;
WORD							watt_prev = 0;
BOOL							auto_cls = FALSE;
BOOL							internal_version = FALSE;
extern BOOL						bln_run_work;
extern PX_SS_STATE			*	g_state;
extern PX_SS_TIME_SERVICE	*	g_time_service;
extern PX_SS_CONFIG			*	g_config;
extern PX_SS_STAT			*	g_stat;
extern char						version[];
extern char						author[];
extern char						last_edit_time[];

void x_ui_init(){
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	memset(&csbi,0,sizeof(CONSOLE_SCREEN_BUFFER_INFO));
	h_console = GetStdHandle(STD_OUTPUT_HANDLE);
	GetConsoleScreenBufferInfo(h_console,&csbi);
	watt_prev = csbi.wAttributes;
	return;
}

void x_ui_display_info(char * tips){
	WORD	watt = FOREGROUND_GREEN;
	if (watt_prev != watt) {
		SetConsoleTextAttribute(h_console,watt);
		printf("%s\n",tips);
		SetConsoleTextAttribute(h_console,watt_prev);
	}else{
		printf("%s\n",tips);
	}
	return;
}
void x_ui_display_error(char * tips){
	WORD	watt = FOREGROUND_RED;
	if (watt_prev != watt) {
		SetConsoleTextAttribute(h_console,watt);
		printf("%s\n",tips);
		SetConsoleTextAttribute(h_console,watt_prev);
	}else{
		printf("%s\n",tips);
	}
	return;
}
void x_ui_display_developer(char * tips){
#ifdef DEVELOPER
	WORD	watt = FOREGROUND_RED|FOREGROUND_INTENSITY;
	if (watt_prev != watt) {
		SetConsoleTextAttribute(h_console,watt);
		printf("%s\n",tips);
		SetConsoleTextAttribute(h_console,watt_prev);
	}else{
		printf("%s\n",tips);
	}
	return;
#else
	return;
#endif
}
void x_debug_info(char * tips){
#ifdef DEBUG
	WORD	watt = FOREGROUND_GREEN;
	if (watt_prev != watt) {
		SetConsoleTextAttribute(h_console,watt);
		printf("%s\n",tips);
		SetConsoleTextAttribute(h_console,watt_prev);
	}else{
		printf("%s\n",tips);
	}
	return;
#else
	return;
#endif
}
void x_debug_error(char * tips){
#ifdef DEBUG
	WORD	watt = FOREGROUND_RED;
	if (watt_prev != watt) {
		SetConsoleTextAttribute(h_console,watt);
		printf("%s\n",tips);
		SetConsoleTextAttribute(h_console,watt_prev);
	}else{
		printf("%s\n",tips);
	}
	return;
#else
	return;
#endif
}

void ss_ui_display_logo(){
	char buf[FILENAME_MAX] = "";
	x_ui_display_info("=============================================================");
	if (auto_cls) {
		system("cls");
	}
	if (internal_version) {
		sprintf(buf,"Status Server version == %s (internal version == %s)",g_config->version,version);
	}else{
		sprintf(buf,"Status Server version == %s",g_config->version);
	}
	x_ui_display_info(buf);
	strcpy(buf,"Current server state == ");
	EnterCriticalSection(g_state->cts_state);
	switch(g_state->curr_state) {
	case STATE_MAIN_NO_INIT:
		strcat(buf,"no_init");
		break;
	case STATE_MAIN_REQUEST_INIT:
		strcat(buf,"request_init");
		break;
	case STATE_MAIN_INIT_DONE:
		strcat(buf,"init_done");
		break;
	case STATE_MAIN_RUN:
		strcat(buf,"run");
		break;
	case STATE_MAIN_REQUEST_CLOSE:
		strcat(buf,"request_close");
		break;
	case STATE_MAIN_CLOSING:
		strcat(buf,"closing");
		break;
	case STATE_MAIN_FREE_RESOURCE:
		strcat(buf,"free_resource");
		break;
	case STATE_MAIN_ERROR_FOUND:
		strcat(buf,"error_found");
		break;
	default:
		strcat(buf,"UnKown");
	}
	LeaveCriticalSection(g_state->cts_state);
	x_ui_display_info(buf);
	sprintf(buf,"Last edit time == %s",last_edit_time);
	x_ui_display_info(buf);
	x_ui_display_info("=============================================================");
	return;
}
void ss_ui_display_author_info(){
	char buf[FILENAME_MAX] = "";
	sprintf(buf,"I am %s",author);
	x_ui_display_info(buf);
	x_ui_display_info("Loving com_game + com_game_design + software_develop + music + walking");
	x_ui_display_info("I just want to make the ProjectX as open source code project");
	x_ui_display_info("If you has any interest with it you may contact me");
	x_ui_display_info("Homepage    : no available current");
	x_ui_display_info("Tel         : +8613881887433");
	x_ui_display_info("Email       : XSuns@hotmail.com");
	x_ui_display_info("Addr        : Jianshe.Road.Chengdu.Sichuan.China");
	x_ui_display_info("University  : Cust graduated 2003 as a boy");
	x_ui_display_info("Age         : 25");
	x_ui_display_info("Nike_name   : MS");
	getchar();
	return;
}
void ss_ui_diaplay_usage(){
	x_ui_display_info("Status Server side help tips:");
	x_ui_display_info("Current support command list as bellow:");
	x_ui_display_info("cls                           Usage:[cls] for clear sreen as dos command cls");
	x_ui_display_info("exit                          Usage:[exit] for exit status server");
	x_ui_display_info("set_text_color()              Usage:[set_text_color() COLOR] to set text color where COLOR can be either of blue|red|green|intensity");
	x_ui_display_info("run_server()                  Usage:[run_server()] for running status server");
	x_ui_display_info("close_server()                Usage:[close_server()] for close status server");
	x_ui_display_info("set_auto_cls()                Usage:[set_auto_cls() on/off] for auto cls on or off");
	x_ui_display_info("set_internal_version()        Usage:[set_internal_version() on/off] for display internal version");
	x_ui_display_info("report_memory_trance_status() Usage:[report_memory_trance_status()] to see memory usage");
	x_ui_display_info("report_memory_trance_info()   Usage:[report_memory_trance_info()] to see specify memory info");
	x_ui_display_info("author_info()                 Usage:[author_info()] to see author info");
	x_ui_display_info("help /? ?                     Usage:[help or /? or ?] for help info");
	x_ui_display_info("for more info contact me(MS)");
	getchar();
	return;
}
BOOL ss_ui_handle_command(char * cmd){
	char buf[FILENAME_MAX] = "";
	PopLeftString(cmd,buf);
	if (buf[0] == '\0') {
		return TRUE;
	}
	if (strcmp(buf,"cls") == 0) {
		system("cls");
	}else if (strcmp(buf,"exit") == 0) {
		if (valid_ss_state(STATE_MAIN_NO_INIT)) {
			bln_run_work = FALSE;
			Sleep(300);
			return FALSE;
		}else{
			x_ui_display_error("can't exit now before server is stopped");
		}
	}else if (strcmp(buf,"set_text_color()") == 0) {
		PopLeftString(cmd,buf);
		if (strcmp(buf,"blue") == 0) {
			SetConsoleTextAttribute(h_console,FOREGROUND_BLUE);
		}else if (strcmp(buf,"red") == 0) {
			SetConsoleTextAttribute(h_console,FOREGROUND_RED);
		}else if (strcmp(buf,"intensity") == 0) {
			SetConsoleTextAttribute(h_console,FOREGROUND_INTENSITY);
		}else if (strcmp(buf,"green") == 0) {
			SetConsoleTextAttribute(h_console,FOREGROUND_GREEN);
		}
	}else if (strcmp(buf,"run_server()") == 0) {
		if (valid_ss_state(STATE_MAIN_NO_INIT)) {
			set_ss_state(STATE_MAIN_REQUEST_INIT);
		}else{
			x_ui_display_error("server can't init now");
		}
	}else if (strcmp(buf,"close_server()") == 0) {
		if (!valid_ss_state(STATE_MAIN_NO_INIT)) {
			set_ss_state(STATE_MAIN_REQUEST_CLOSE);
		}else{
			x_ui_display_error("server can't close now");
		}
	}else if (strcmp(buf,"set_auto_cls()") == 0) {
		PopLeftString(cmd,buf);
		if (strcmp(buf,"on") == 0) {
			auto_cls = TRUE;
		}else{
			auto_cls = FALSE;
		}
	}else if (strcmp(buf,"set_internal_version()") == 0) {
		PopLeftString(cmd,buf);
		if (strcmp(buf,"on") == 0) {
			internal_version = TRUE;
		}else{
			internal_version = FALSE;
		}
	}else if (strcmp(buf,"report_memory_trance_status()") == 0) {
		report_memory_trance_status();
	}else if (strcmp(buf,"report_memory_trance_info()") == 0) {
		report_memory_trance_info();
	}else if (strcmp(buf,"author_info()") == 0) {
		ss_ui_display_author_info();
	}else if ((strcmp(buf,"help") == 0)||(strcmp(buf,"/?") == 0)||(strcmp(buf,"?") == 0)) {
		ss_ui_diaplay_usage();
	}else{
		x_ui_display_error("Invalid input,check and try again,need help,type help or ? or /?");
	}
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -