private static void cnt_elem_refr(GlobalTypes.HostInfo host_inf, GlobalTypes.SysMessageStruct msg, GlobalTypes.ClientInfo item, bool flag) { if ((Encoding.UTF8.GetString(msg.Msg) == "SYN") && (msg.Flag == 2)) { if (!flag) { item = new GlobalTypes.ClientInfo(host_inf); lock (MainWindow.Client_Catalog) { MainWindow.Client_Catalog.Add(item); } RCScreenClient.paint_thmb_scr(item); } else { lock (MainWindow.Client_Catalog) { item.HostInfo = host_inf; item.LastConnection = DateTime.Now; } } lock (XPorter.Bus.Main_Handle.TreeUngroup) { XPorter.Bus.Main_Handle.TreeUngroup.Dispatcher.BeginInvoke(new MethodInvoker(delegate() { System.Windows.Controls.ContextMenu item_menu = ReinCorpDesign.sources.UserContextMenu.get_contx_menu(item); if (XPorter.Bus.Main_Handle.TreeUngroup.IsExpanded == false) { XPorter.Bus.Main_Handle.TreeUngroup.IsExpanded = true; } TreeViewItem tr_item = new TreeViewItem(); tr_item.ContextMenu = item_menu; tr_item.Header = item.HostInfo.Addr.ToString(); tr_item.Tag = "3"; XPorter.Bus.Main_Handle.TreeUngroup.Items.Add(tr_item); })); } Thread thr_tmp = new Thread(RCScreenClient.get_query); Object[] args = new Object[2]; args[0] = item; args[1] = new GlobalTypes.ServiceMessageStruct("GET", 0); thr_tmp.Name = "get_query"; thr_tmp.SetApartmentState(ApartmentState.STA); //thr_tmp.Start(args); } }
//function which send msg by TCP protocol to all users public static void send_to_all_sys_msg(GlobalTypes.SysMessageStruct msg) { if (!Threads_Already_Started) //if user push multiconnect a couple of time { MainWindow.thr_killer(RCScreenClient.thr_Get_Img_From_UDP); foreach (var item in MainWindow.Client_Catalog) { TcpClient client = get_tcp(item.HostInfo.Addr, GlobalTypes.Settings.TCPPort); if (client != null) { send_to <GlobalTypes.SysMessageStruct>(client.GetStream(), msg); //analyze msg for further actions client.Close(); } } } }
//create connection between two point public static TcpClient cnt_estblsh(TcpClient tcp_client) { tcp_client.Client.ReceiveTimeout = 5000; tcp_client.Client.SendTimeout = 5000; try { GlobalTypes.SysMessageStruct msg = new GlobalTypes.SysMessageStruct(); NetworkStream net_stream = tcp_client.GetStream(); send_to <GlobalTypes.SysMessageStruct>(net_stream, new GlobalTypes.SysMessageStruct("CNT", 0)); msg = receive_from <GlobalTypes.SysMessageStruct>(net_stream); if ((Encoding.UTF8.GetString(msg.Msg) == "PAS") && (msg.Flag == 0)) { send_to <GlobalTypes.SysMessageStruct>(net_stream, new GlobalTypes.SysMessageStruct("PAS", 1, GlobalTypes.Settings.Password)); msg = receive_from <GlobalTypes.SysMessageStruct>(net_stream); if ((Encoding.UTF8.GetString(msg.Msg) == "SYN")) { switch (msg.Flag) { case 1: return(tcp_client); break; case 100: MessageBox.Show(DateTime.Now.ToString() + " IPAddress:" + ((IPEndPoint)tcp_client.Client.RemoteEndPoint).Address.ToString() + " - Wrong Password" ); return(null); //Сюда создать логи break; default: return(null); break; } } } } catch (SocketException ex) { /*MessageBox.Show(ex.ToString()); */ } catch (Exception ex) { /*MessageBox.Show(ex.ToString());*/ } return(null); }
//analyze msg for futher action public static void sys_msg_analyzer(TcpClient tcp_client, GlobalTypes.ClientInfo item, GlobalTypes.SysMessageStruct main_msg) { try { NetworkStream net_stream = tcp_client.GetStream(); send_to <GlobalTypes.SysMessageStruct>(net_stream, main_msg); switch (Encoding.UTF8.GetString(main_msg.Msg)) { #region Screen case "SCR": { switch (main_msg.Flag) { case 0: { tcp_client.Client.ReceiveTimeout = 5000; GlobalTypes.SysMessageStruct host_inf = receive_from <GlobalTypes.SysMessageStruct>(net_stream); GlobalTypes.SysMessageStruct msg = receive_from <GlobalTypes.SysMessageStruct>(net_stream); if ((host_inf != null) && (msg != null)) { cnt_elem_refr(new GlobalTypes.HostInfo( ((IPEndPoint)tcp_client.Client.RemoteEndPoint).Address, host_inf.Info), msg, item, item != null); } else { MessageBox.Show("Не удалось установить соединение"); //Дописать в лог } } break; case 11: { } break; default: { if ((main_msg.Flag > 0) && (main_msg.Flag < 11)) { } } break; } } break; #endregion } } catch (Exception ex) { MessageBox.Show("Lost Connection"); } }
public static int port_dealer(IPAddress address, GlobalTypes.SysMessageStruct msg, int start_port) { List <int> busy_ports = get_busy_port(); byte counter = 0; int port = 0; while (counter < 10) { try { TcpClient connection = get_tcp(address, GlobalTypes.Settings.TCPPort); NetworkStream ns = connection.GetStream(); while ((busy_ports.IndexOf(start_port + counter) > -1) || (Opened_Ports.IndexOf(start_port + counter)) > -1) { start_port++; } msg.Info = Encoding.UTF8.GetBytes((start_port + counter).ToString()); send_to <GlobalTypes.SysMessageStruct>(ns, msg); GlobalTypes.SysMessageStruct referer = receive_from <GlobalTypes.SysMessageStruct>(ns); if ((Encoding.UTF8.GetString(referer.Msg).Equals("SYN")) && (referer.Flag == 3)) { port = start_port + counter; return(port); } if ((Encoding.UTF8.GetString(referer.Msg).Equals("ERR")) && (referer.Flag == 102)) { counter++; } else { counter++; } connection.Client.Shutdown(SocketShutdown.Both); connection.Close(); } catch (SocketException ex) { counter++; break; } catch (Exception ex) { counter++; break; } } return(port); }