ragdoll quality improvements
[carveJwlIkooP6JGAAIwe30JlM.git] / servermonitor_client.c
1 #ifndef SERVERMONITOR_H
2 #define SERVERMONITOR_H
3
4 #include <sys/socket.h>
5 #include <sys/types.h>
6 #include <sys/un.h>
7 #include <netdb.h>
8 #include <stdio.h>
9 #include <string.h>
10 #include <stdlib.h>
11 #include <unistd.h>
12 #include <errno.h>
13
14 #ifndef VG_RELEASE
15 #define VG_DEVWINDOW
16 #endif
17
18 #define VG_3D
19 #define VG_GAME
20 #define VG_MSG_V1_SUPPORT
21 #define VG_LOG_SOURCE_INFO
22 #define VG_TIMESTEP_FIXED (1.0/60.0)
23 #define VG_NO_STEAM
24 #define VG_NO_AUDIO
25 #include "vg/vg.h"
26 #include "vg/vg_lines.h"
27 #include "vg/vg_imgui.h"
28 #include "monitorinfo.h"
29
30 int main( int argc, char *argv[] ){
31 vg_mem.use_libc_malloc = 0;
32 vg_set_mem_quota( 160*1024*1024 );
33 vg_enter( argc, argv, "Server Monitor" );
34 return 0;
35 }
36
37 static void vg_launch_opt(void){}
38
39 static int sockfd = -1;
40
41 static void connect_to_monitor_server(void){
42 struct sockaddr_un serv_addr;
43
44 if((sockfd = socket(AF_UNIX, SOCK_STREAM|SOCK_NONBLOCK, 0)) < 0){
45 vg_error("Could not create socket\n");
46 sockfd = -1;
47 return;
48 }
49
50 memset( &serv_addr, 0, sizeof(serv_addr) );
51
52 serv_addr.sun_family = AF_UNIX;
53 strcpy( serv_addr.sun_path, MONITOR_SOCK_PATH );
54
55 vg_info( "Connecting...\n" );
56 if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0 ){
57 vg_error("Connect Failed \n");
58 close( sockfd );
59 sockfd = -1;
60 return;
61 }
62
63 vg_success( "Connected\n" );
64 }
65
66 static void vg_preload(void){}
67
68 static void vg_load(void){
69 vg_bake_shaders();
70 vg_console_load_autos();
71 }
72
73 /*
74 * UPDATE LOOP
75 * ---------------------------------------------------------------------------*/
76
77 static void vg_pre_update(void){
78 if( sockfd == -1 ) return;
79
80 char recvBuff[1024];
81 int len = read(sockfd, recvBuff, sizeof(recvBuff)-1);
82
83 if( len > 0 ){
84 recvBuff[ len ] = 0;
85 vg_info( "%s", recvBuff );
86 }
87 }
88
89 static void vg_fixed_update(void){
90 }
91
92 static void vg_post_update(void){
93 }
94
95 /*
96 * RENDERING
97 * ---------------------------------------------------------------------------*/
98
99 static void vg_framebuffer_resize( int w, int h ){
100 }
101
102 static void vg_render(void){
103 glBindFramebuffer( GL_FRAMEBUFFER, 0 );
104 glViewport( 0,0, vg.window_x, vg.window_y );
105 glDisable( GL_DEPTH_TEST );
106 glDisable( GL_BLEND );
107
108 glClearColor( 0.1f, 0.1f, 0.1f, 1.0f );
109 glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
110
111 vg_lines_drawall();
112 }
113
114 static void vg_gui(void){
115 vg_ui.wants_mouse = 1;
116 static i32 page = 0;
117 ui_rect panel = { 0, 0, vg.window_x, vg.window_y };
118 ui_rect_pad( panel, (ui_px[]){ 8, 8 } );
119
120 const char *pages[] = { "Status", "Options" };
121 ui_tabs( panel, panel, pages, vg_list_size(pages), &page );
122
123 if( page == 0 ){
124 char buf[512];
125 snprintf( buf, 511, "%sSockfd: %d", (sockfd==-1?KRED:KGRN), sockfd );
126 ui_info( panel, buf );
127
128 if( sockfd == -1 ){
129 if( ui_button( panel, "Reconnect" ) == 1 ){
130 connect_to_monitor_server();
131 }
132 }
133 else{
134 if( ui_button( panel, "Disconnect" ) == 1 ){
135 close( sockfd );
136 sockfd = -1;
137 }
138 }
139 }
140 }
141
142 #endif /* SERVERMONITOR_H */