?? dialog.c
字號:
#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<sys/select.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>//#include<pthread.h>#include <gtk/gtk.h>#include "inifile.h"#include "dialog.h"#include "IpHead.h"#include "socket.h"#define MAXSOCKFD 11#define BUFFERSIZE 4096#define MAXMAP 100//--------------------------------------------//// CommServer ver2.0 ////-------------------------------------------//int giRows =0;GtkTextBuffer *gbuffer;GtkWidget *text;struct IPTable iptable[MAXMAP];int giMapNum =0;extern int gThreadRunning;extern int gThreadStop;void StartService(void){ int fileError; char s[200]; int i =0; char ItemHead[30]; fileError = ReadINI("Comm.ini"); if (fileError ==0) { sprintf(s,"Can't open Comm.ini File.Checking the file is existed.\n"); ShowMessage(s); } if(GetItem("main","localipaddress1") != NULL){ strcpy(gsLocalIP1, GetItem("main","localipaddress1")); } if(GetItem("main","localipaddress2") != NULL){ strcpy(gsLocalIP2 ,GetItem("main","localipaddress2")); } if(GetItem("main","remoteipaddress") != NULL){ strcpy(gsRemoteIP,GetItem("main","remoteipaddress")); } giMapNum = atoi(GetItem("main","mapportnum")); if(giMapNum > 0) { for(i=1;i<(giMapNum + 1);i++) { // bzero(ItemHead,sizeof(ItemHead)); sprintf(ItemHead,"mapport%d",i); iptable[i].ctrlport = atoi(GetItem(ItemHead,"ctrlport")); iptable[i].mapport = atoi(GetItem(ItemHead,"mapport")); strcpy(iptable[i].ipaddress,GetItem(ItemHead,"ip")); } }else{ ShowMessage("無映射端口,請設置!\n"); return; } gThreadRunning = 1; InitList(); for(i=1;i<(giMapNum+1);i++) { if(iptable[i].ctrlport > 0) { g_thread_create((GThreadFunc)ListenPortTread, iptable[i].ctrlport,FALSE,NULL); } } //int transport; //transport = TRANSPORT; g_thread_create((GThreadFunc)TransmitThread, TRANSPORT,FALSE,NULL); //-----------start listen for be map port-----------------// ListenMapPort();// ShowMessage("初始化完畢!\n");}void ListenMapPort(){ int i; int mapport; char ipaddr[16]; int iError; char strmsg[100]; for (i = 1;i < MAXPORTNUM;i++) { mapport = iptable[i].mapport; if(mapport > 0) { if(strlen(iptable[i].ipaddress) > 0 ) { strcpy(ipaddr,iptable[i].ipaddress); } iError = CheckHost(ipaddr); if(iError == 0) { g_thread_create((GThreadFunc)ScanMapPortThread,i,FALSE,NULL); }else { sprintf(strmsg,"ipaddress : %s not find,port : %d not be mapping.\n",ipaddr,mapport); ShowMessage(strmsg); } } }}static gint motion_notify_event (GtkWidget *widget, GdkEventMotion *event){ /*int x, y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &x, &y, &state); else { x = event->x; y = event->y; state = event->state; } if (state & GDK_BUTTON1_MASK && pixmap != NULL) draw_brush (widget, x, y); */ return TRUE;}static gint configure_event(GtkWidget *widget,GdkEventConfigure *event){ return TRUE;}int QMessageBox(GtkWidget *window,char *info){ GtkWidget *dialog; gint response; int result=0; dialog = gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO,GTK_BUTTONS_YES_NO,(gchar *)info); response = gtk_dialog_run(GTK_DIALOG(dialog)); switch(response) { case GTK_RESPONSE_YES: result = 1; break; case GTK_RESPONSE_NO: result = 2; break; default: break; } if (result > 0 ) gtk_widget_destroy(dialog); return result;}void ClsView(void){ GtkTextIter start,end; gdk_threads_enter(); gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(gbuffer),&start,&end); // /*獲得緩沖區開始和結束位置的Iter */ gtk_text_buffer_delete(GTK_TEXT_BUFFER(gbuffer),&start,&end); /*delete text buffer*/ gdk_threads_leave();}void ClsView1(void){ GtkTextIter start,end;// gdk_threads_enter(); gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(gbuffer),&start,&end); // /*獲得緩沖區開始和結束位置的Iter */ gtk_text_buffer_delete(GTK_TEXT_BUFFER(gbuffer),&start,&end); /*delete text buffer*/// gdk_threads_leave();}void insert_text( GtkTextBuffer *buffer ,const char *str){ GtkTextIter start,end; gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(gbuffer),&start,&end); // /*獲得緩沖區開始和結束位置的Iter*/ gtk_text_buffer_insert (gbuffer, &end,str, -1);}void Msg(const char *str){ if (giRows > 50) { ClsView1(); giRows = 0; }// gdk_threads_enter(); insert_text(gbuffer ,str);// gdk_threads_leave(); giRows++;}void ShowMessage(const char *str){ if (giRows > 50) { ClsView(); giRows = 0; } gdk_threads_enter(); insert_text(gbuffer ,str); gdk_threads_leave(); giRows++;}static GtkWidget *create_text( void ){ GtkWidget *scrolled_window; GtkWidget *view; view = gtk_text_view_new (); gbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled_window), view); gtk_widget_show_all (scrolled_window); return scrolled_window;} int main( int argc, char *argv[] ){ GtkWidget *window; GtkWidget *textview; GtkWidget *menu; GtkWidget *table; if(!g_thread_supported()) g_thread_init(NULL); gdk_threads_init(); gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "CommService ver 2.0"); g_signal_connect (GTK_WINDOW (window), "configure_event", G_CALLBACK (configure_event), NULL); g_signal_connect (GTK_WINDOW (window), "delete_event", G_CALLBACK (delete), NULL); g_signal_connect (GTK_WINDOW (window), "motion_notify_event", G_CALLBACK (motion_notify_event), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); gtk_widget_set_size_request (GTK_WIDGET (window), 800, 600); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); table = gtk_table_new (20,1,FALSE); gtk_container_add (GTK_CONTAINER (window), table); menu = CreateMenu(); gtk_table_attach_defaults (GTK_TABLE (table), menu, 0, 1, 0, 1); gtk_widget_show (menu); textview = create_text(); gtk_table_attach_defaults (GTK_TABLE (table), textview, 0, 1,1, 20); gtk_widget_show(textview); gtk_widget_show (table); gtk_widget_show(window); // Get Application current path. GetApplicationPath(argv[0]); // --- Start Thread and Socket Service----// ShowMessage("Service Starting...............................\n"); StartService(); gdk_threads_enter(); gtk_main (); gdk_threads_leave(); return 0;}static GtkWidget *CreateMenu(){ GtkWidget *menu; GtkWidget *menu_bar; GtkWidget *root_menu; GtkWidget *menu_items; GtkWidget *hbox; menu = gtk_menu_new (); /* Create a new menu-item with a name... */ menu_items = gtk_menu_item_new_with_label ("重啟線程"); /* ...and add it to the menu. */ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); /* Do something interesting when the menuitem is selected */ g_signal_connect_swapped (menu_items, "activate", G_CALLBACK (menuitem_response), 1); /* Show the widget */ gtk_widget_show (menu_items); menu_items = gtk_menu_item_new_with_label ("關閉線程"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); /* Do something interesting when the menuitem is selected */ g_signal_connect_swapped (menu_items, "activate", G_CALLBACK (menuitem_response), 2); /* Show the widget */ gtk_widget_show (menu_items); menu_items = gtk_menu_item_new_with_label ("退出系統"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); /* Do something interesting when the menuitem is selected */ g_signal_connect_swapped (menu_items, "activate", G_CALLBACK (menuitem_response), 3); /* Show the widget */ gtk_widget_show (menu_items); /* This is the root menu, and will be the label * displayed on the menu bar. There won't be a signal handler attached, * as it only pops up the rest of the menu when pressed. */ root_menu = gtk_menu_item_new_with_label ("運行"); gtk_widget_show (root_menu); /* Now we specify that we want our newly created "menu" to be the menu * for the "root menu" */ gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); /* Create a menu-bar to hold the menus and add it to our main window */ menu_bar = gtk_menu_bar_new (); // gtk_box_pack_start (GTK_BOX (hbox), menu_bar, FALSE, FALSE, 2);// gtk_container_add (GTK_CONTAINER (window), menu_bar); gtk_widget_show (menu_bar); gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); return menu_bar;}static void menuitem_response( gint menuitem ){ switch(menuitem) { case 1: //Start gdk_threads_init(); ShowMessage("Thread Restarting..........\n"); StartService(); break; case 2: //Stop gThreadRunning=0; break; case 3: onExit(); //-------------test------------ default: break; }}gboolean onExit(){ int result; char s[10]; // gdk_threads_init(); result = QMessageBox(NULL,"是否要退出系統?"); if(result == 1) { //----Close Socket Thread----------// gThreadRunning=0; gtk_main_quit(); return FALSE; } return TRUE;}static gboolean delete(GtkWidget *widget, GdkEvent *event, gpointer data ){ int result; char s[10]; result = QMessageBox(widget,"是否要退出系統?"); if(result == 1) { //----Close Socket Thread----------// gThreadRunning=0; // while(gThreadStop > 0){ // sprintf(s,"%d",gThreadStop); // ShowMessage(s); // sleep(1000); // } gtk_main_quit(); return FALSE; } return TRUE;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -