00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "pandatoolbase.h"
00016
00017 #include "winStatsServer.h"
00018 #include "config_pstats.h"
00019 #include "pystub.h"
00020
00021 #include <windows.h>
00022
00023 static const char *toplevel_class_name = "pstats";
00024 static WinStatsServer *server = NULL;
00025
00026
00027
00028
00029
00030 static LONG WINAPI
00031 toplevel_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
00032 switch (msg) {
00033 case WM_TIMER:
00034 server->poll();
00035 break;
00036
00037 case WM_DESTROY:
00038 PostQuitMessage(0);
00039 break;
00040
00041 default:
00042 break;
00043 }
00044
00045 return DefWindowProc(hwnd, msg, wparam, lparam);
00046 }
00047
00048
00049
00050
00051
00052
00053
00054 static HWND
00055 create_toplevel_window(HINSTANCE application) {
00056 WNDCLASS wc;
00057
00058 ZeroMemory(&wc, sizeof(WNDCLASS));
00059 wc.lpfnWndProc = (WNDPROC)toplevel_window_proc;
00060 wc.hInstance = application;
00061 wc.lpszClassName = toplevel_class_name;
00062
00063 if (!RegisterClass(&wc)) {
00064 nout << "Could not register window class!\n";
00065 exit(1);
00066 }
00067
00068 DWORD window_style = WS_POPUP | WS_SYSMENU | WS_ICONIC;
00069
00070 ostringstream strm;
00071 strm << "PStats " << pstats_port;
00072 string window_name = strm.str();
00073
00074 HWND toplevel_window =
00075 CreateWindow(toplevel_class_name, window_name.c_str(), window_style,
00076 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
00077 NULL, NULL, application, 0);
00078 if (!toplevel_window) {
00079 nout << "Could not create toplevel window!\n";
00080 exit(1);
00081 }
00082
00083 return toplevel_window;
00084 }
00085
00086
00087
00088
00089
00090
00091 #ifndef DEVELOP_WINSTATS
00092 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
00093 #else
00094 int main(int argc, char *argv[])
00095 #endif
00096 {
00097 HINSTANCE application = GetModuleHandle(NULL);
00098 HWND toplevel_window = create_toplevel_window(application);
00099
00100 ShowWindow(toplevel_window, SW_SHOWMINIMIZED);
00101
00102
00103 server = new WinStatsServer;
00104 if (!server->listen()) {
00105 ostringstream stream;
00106 stream
00107 << "Unable to open port " << pstats_port
00108 << ". Try specifying a different\n"
00109 << "port number using pstats-port in your Config file.";
00110 string str = stream.str();
00111 MessageBox(toplevel_window, str.c_str(), "PStats error",
00112 MB_OK | MB_ICONEXCLAMATION);
00113 exit(1);
00114 }
00115
00116
00117 SetTimer(toplevel_window, 1, 200, NULL);
00118
00119
00120 MSG msg;
00121 int retval;
00122 retval = GetMessage(&msg, NULL, 0, 0);
00123 while (retval != 0) {
00124 if (retval == -1) {
00125 nout << "Error processing message queue.\n";
00126 exit(1);
00127 }
00128 TranslateMessage(&msg);
00129 DispatchMessage(&msg);
00130 retval = GetMessage(&msg, NULL, 0, 0);
00131 }
00132
00133 return (0);
00134 }