/// <summary> /// 保存客户端的IP地址 /// </summary> /// <param name="socket"></param> /// <param name="c_to_s_data"></param> public void SaveClientIp(Socket socket, C_To_S_Data <CSDataStandard.Transfer.RealRec> c_to_s_data) { IPEndPoint ipEndPoint = (IPEndPoint)socket.RemoteEndPoint; string ip = ipEndPoint.Address.ToString(); Clazz.Config.XML_Org _org = SysConfig.orgConfig.GetOrgByOrgId(c_to_s_data.OrgId); if (_org == null) { //将信息写入到日志文件中 orgid为***的污水厂不存在 LogMg.AddError(String.Format("OrgId:{0} 不存在", c_to_s_data.OrgId)); //isSuccess = false; } else { try { SWSDataContext SWS = new SWSDataContext(ServerSocketHelper.GetConnection(_org.DBName)); //建立一个分厂数据源提供程序实例 country_station station = SWS.country_station.SingleOrDefault(c => c.id == c_to_s_data.StationId); if (station == null) { LogMg.AddError("StationId: " + c_to_s_data.StationId + " 不存在"); } else { station.ip = ip; //保存客户端IP地址 SWS.SubmitChanges(); } } catch (Exception ex) { LogMg.AddError(ex); } } }
public ServerPanel(ServerSocketHelper socket) { Socket = socket; ViewModel = new ServerPanelViewModel(socket); DataContext = ViewModel; InitializeComponent(); }
private void DeviceControlCallBack(Socket socket, string json) { C_To_S_Data <CSDataStandard.Transfer.DeviceControl> receiveObj = Utility.JsonHelper.JsonDeserialize <C_To_S_Data <CSDataStandard.Transfer.DeviceControl> >(json); //获取所有Org Clazz.Config.XML_Org org = SysConfig.orgConfig.GetOrgByOrgId(receiveObj.OrgId); if (org == null) //判断Org是否存在 { string msg = "OrgId:" + receiveObj.OrgId + "不存在"; LogMg.AddError(msg); lb_msg.Items.Add(msg); } else { try { SWSDataContext db = new SWSDataContext(ServerSocketHelper.GetConnection(org.DBName)); string stationName = "未知的客户端"; country_station station = db.country_station.SingleOrDefault(c => c.id == receiveObj.StationId); if (station != null) { stationName = station.name; } saveData(db, receiveObj, stationName); sendData(db, socket, stationName, receiveObj.StationId); } catch (Exception ex) { LogMg.AddError(ex); DEBUG.MsgBox(ex.ToString()); } } }
// 实时数据回调 目前支持6路传感器,以后通道数会增加 private int DoOnRealData(uint handle, int seq, ref SDK_Node_Real_Data data, IntPtr user) { try { //找出数据节点Id所对应的分厂 SDK_Node_Real_Data _data = data; List <DBCJ.XML_DBCJTest> tests = ALLTestList.Where(c => c.NodeId == _data.nodeid).ToList(); //如果没有这个采集设备的信息 则丢弃这个设所采集的数据 直接return if (tests == null) { BeginInvoke(new UpdateUI(WriteStatus), string.Format("节点Id为 {0} 的设备匹配不到对应的分厂", data.nodeid)); return(0); } Clazz.Config.XML_Org org = allOrg.SingleOrDefault(c => c.OrgId == tests[0].OrgId); BeginInvoke(new UpdateUI(WriteStatus), string.Format("实时数据 节点Id:{0} 企业名称:{1} 数据库名称:{2}", data.nodeid, org.Name, org.DBName)); SWSDataContext db = new SWSDataContext(ServerSocketHelper.GetConnection(org.DBName)); //分厂数据库实例 for (int i = 0; i < data.sensorData.Length; i++) { //检测该通道是否有效 if (data.sensorData[i].valid == 0) { continue; } BeginInvoke(new UpdateUI(WriteStatus), string.Format("通道{0}, 类型{1}, 数据:{2}, 时间:{3}", i + 1, data.sensorData[i].type, data.sensorData[i].data, JHTimeToDateTime(data.sensorData[i].time).ToString())); //这里有空改成用线程去保存数据到数据库 #region 用异步的方式将数据保存到数据库 realrec _realrec = new 务器端接收程序.realrec(); _realrec.testid = Convert.ToInt32(tests.SingleOrDefault(c => c.NodeId == _data.nodeid).TestId); //检测点ID _realrec.testtime = JHTimeToDateTime(data.sensorData[i].time); //时间 _realrec.value = (decimal)data.sensorData[i].data; //获取的电量 BeginInvoke(new SaveDataToDatabase(Save), db, _realrec); #endregion } } catch (Exception e) { LogMg.AddError(e); } return(0); }
//服务开启 private void btn_Start_Click(object sender, EventArgs e) { try { if (test_connection() == false) { listBox1.Items.Add("连接数据库失败"); listBox1.Items.Add("请确保数据库服务已开启,并且数据库连接填写正确"); return; } ServerSocketHelper.Init(); ServerSocketHelper.StartListen(txt_ServerIp.Text.Trim(), txt_Port_SWS.Text.Trim()); GPRSControl.DTU_NetServer.Init(); // GPRSControl.GPRSControlNetServer.StartListen("192.168.1.8","5678"); GPRSControl.DTU_NetServer.StartListen(txt_ServerIp.Text.Trim(), txt_port_DTU.Text.Trim()); V88CommunicationThread.getInstance().Start(); UdpV88Server.getInstance().StartListen(txt_ServerIp.Text.Trim(), txt_port_udp.Text.Trim()); //心跳线程开启 HeartbeatThread.Start(); //主动发指令的线程开启 ControlCommandThread.Start(); //定时发指令的线程开启 AutoCollectionThread.Start(); save(); btn_Start.Enabled = false; btn_Stop.Enabled = true; ///关闭自动启动服务的定时器 if (AutoStartTimer != null) { AutoStartTimer.Stop(); } listBox1.Items.Add("服务已成功开启"); } catch (Exception ex) { ServerSocketHelper.Close(); // DTU_NetServer.Close(); LogMg.AddError(ex); listBox1.Items.Add(ex.Message); // MessageBox.Show(ex.Message); } }
private async void ServerButton_Click(object sender, RoutedEventArgs e) { (sender as Button).IsEnabled = false; Config.Instance.Save(); try { ServerSocketHelper helper = new ServerSocketHelper(); helper.Start(ViewModel.ServerPort, ViewModel.ServerPassword); tcsServer.SetResult(helper); } catch (Exception ex) { await MainWindow.Current.ShowMessageAsync("启动失败:", ex); (sender as Button).IsEnabled = true; } }
//服务停止 private void btn_Stop_Click(object sender, EventArgs e) { try { ServerSocketHelper.Close(); // DTU_NetServer.Close(); UdpV88Server.getInstance().close(); btn_Start.Enabled = true; btn_Stop.Enabled = false; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public ServerPanelViewModel(ServerSocketHelper socket) { Socket = socket; SelectedSession = Sessions.Count == 0 ? null : Sessions[0]; socket.Server.SessionsChanged += Server_SessionsChanged; }