📄 px_ss_ui.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 + -