コード例 #1
0
        /// <summary>
        /// 设置请求头
        /// </summary>
        /// <param name="response"></param>
        /// <param name="headers"></param>
        public static void SetHeaders(HttpResponse response, Dictionary <string, string> headers)
        {
            if (headers != null)
            {
                foreach (var item in headers)
                {
                    try
                    {
                        switch (item.Key)
                        {
                        case "Content-Type":
                            response.ContentType = item.Value;
                            break;

                        default:
                            response.Headers.Add(item.Key, item.Value);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log4netHelper.Fatal("SetHeaders异常" + item.Key, ex);
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 设置会话的心跳包
        /// </summary>
        /// <param name="dueTime">延迟的时间量(以毫秒为单位)</param>
        /// <param name="period">时间间隔(以毫秒为单位)</param>
        /// <returns></returns>
        public bool TrySetKeepAlive(int dueTime, int period)
        {
            var outOptionValue = new byte[12];
            var inOptionValue  = new byte[] { 1, 0, 0, 0, 0x20, 0x4e, 0, 0, 0xd0, 0x07, 0, 0 };

            try
            {
                this.Socket.IOControl(IOControlCode.KeepAliveValues, inOptionValue, outOptionValue);
                return(true);
            }
            catch (NotSupportedException ex)
            {
                this.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, inOptionValue);
                Log4netHelper.Fatal("设置心跳包异常", ex);
                return(true);
            }
            catch (NotImplementedException ex)
            {
                this.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, inOptionValue);
                Log4netHelper.Fatal("设置心跳包异常", ex);
                return(true);
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal("设置心跳包异常", ex);
                return(false);
            }
        }
コード例 #3
0
 //值为空或者占位符的验证
 public void Dgd_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
 {
     try
     {
         DataGridView dgd = sender as DataGridView;
         if (e.ColumnIndex != 1)
         {
             return;
         }
         string Cellvalue_str = e.FormattedValue.ToString();
         if (string.IsNullOrEmpty(Cellvalue_str.Trim()) || Cellvalue_str.Contains("&") || Cellvalue_str.Contains(";") || Cellvalue_str.Contains(":"))
         {
             e.Cancel = true;//数据格式不正确则还原
             dgd.CancelEdit();
         }
         else
         {
             e.Cancel = false;
         }
     }
     catch (Exception ex)
     {
         Log4netHelper.Fatal(this.GetType(), "CellValidating验证时发生异常:" + ex.Message);
     }
 }
コード例 #4
0
 /// <summary>
 /// 获取指定枚举的所有字段值以及描述
 /// </summary>
 /// <param name="enumType"></param>
 /// <returns></returns>
 public static Dictionary <ValueType, string> GetList(Type type)
 {
     if (CACHE_TYPE.ContainsKey(type))
     {
         return(CACHE_TYPE[type]);
     }
     else
     {
         var ret       = new Dictionary <ValueType, string>();
         var fieldInfo = type.GetFields();
         foreach (var field in fieldInfo)
         {
             var atts = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
             foreach (DescriptionAttribute att in atts)
             {
                 var value = field.GetValue(type) as ValueType;
                 if (ret.ContainsKey(value))
                 {
                     Log4netHelper.Fatal(string.Format("类型{0}拥有相同的Value{1}", type.FullName, value));
                 }
                 else
                 {
                     ret.Add(value, att.Description);
                 }
                 break;
             }
         }
         CACHE_TYPE[type] = ret;
         return(ret);
     }
 }
コード例 #5
0
 public void Dgd_CellErrorTextNeeded(object sender, DataGridViewCellErrorTextNeededEventArgs e)
 {
     if (e.ColumnIndex == 1)
     {
         try
         {
             if (e.RowIndex == 0)
             {
                 Regex reg = new Regex(@"^[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?$");
                 if (tabControl1.SelectedTabIndex == 0)
                 {
                     //检查是否有数字外的字符
                     Match ma1 = reg.Match(dataGridViewX1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
                     if (!ma1.Success)
                     {
                         dataGridViewX1.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "非法字符";
                         return;
                     }
                 }
                 else
                 {
                     Match ma2 = reg.Match(dataGridViewX2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
                     if (!ma2.Success)
                     {
                         dataGridViewX2.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "非法字符";
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             Log4netHelper.Fatal(this.GetType(), "文本内容检测时发生异常:" + ex);
         }
     }
 }
コード例 #6
0
        private static void InitialSgBom(object sgobject)
        {
            TreeNode sgnode = sgobject as TreeNode;

            try
            {
                DataTable dt_sgbom = sqlconnection.ExecuteDataTable(Constant.strConnectSQL_T, CommandType.Text, string.Format("select distinct sgseriesbom from {0}", Constant.SGseries_sqlname), null);
                for (int i = 0; i < dt_sgbom.Rows.Count; i++)
                {
                    TreeNode sgbomnode = new TreeNode();
                    sgbomnode.Text       = dt_sgbom.Rows[i][0].ToString();
                    sgbomnode.ImageIndex = 4;
                    sgnode.Nodes.Add(sgbomnode);
                }
                //加载完成后,计数
                Finished_Counter++;

                while (!Opened_flag)
                {
                    Thread.Sleep(1000);
                }
                UpdateTV(sgnode);
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal(new TreeNodeHelper().GetType(), string.Format("初始化{0}节点信息时发生异常", sgnode.Text), ex);
                MessageBox.Show(ex.Message);
            }
        }
コード例 #7
0
 /// <summary>
 /// 关闭连接
 /// </summary>
 /// <param name="ex">异常信息,如果主动关闭未Null,如果异常引发关闭则是异常信息</param>
 public void Close(Exception ex = null)
 {
     if (!this.IsDisposable)
     {
         lock (Socket)
         {
             if (!this.IsDisposable)
             {
                 Log4netHelper.Debug($"正在关闭客户端与服务端的链接:{IPE.Address.ToString()}");
                 Socket.Shutdown(SocketShutdown.Both);
                 Socket.Close();
                 Socket.Dispose();
                 IsDisposable = true;
                 if (CloseCallback != null)
                 {
                     try
                     {
                         CloseCallback(ex);
                     }
                     catch (Exception close_ex)
                     {
                         Log4netHelper.Fatal($"客户端接收到消息但执行DisposeCallback异常", close_ex);
                     }
                 }
             }
         }
     }
 }
コード例 #8
0
 /// <summary>
 /// 开始接受消息
 /// </summary>
 private void Receive()
 {
     while (this.Socket.Connected)
     {
         var buffer = Receive(null);
         if (buffer != null && buffer.Length > 0)
         {
             var message_content = Encoding.UTF8.GetString(buffer).TrimEnd('\0');
             while (!message_content.EndsWith(SocketCommand.MessageSeparator))//如果不是一条完整的消息,继续接收
             {
                 buffer          = Receive(buffer);
                 message_content = Encoding.UTF8.GetString(buffer).TrimEnd('\0');
             }
             var message_list = message_content.ToListData(separator: SocketCommand.MessageSeparator);
             foreach (var message_item in message_list)
             {
                 var message_item_content = string.Empty;
                 try
                 {
                     message_item_content = message_item.DecryptBase64(encode: Encoding.UTF8);
                     ReceiveCallbackAsync(message_item_content);
                 }
                 catch (Exception ex)
                 {
                     Log4netHelper.Fatal($"接受到消息:{message_item}解密异常", ex);
                     continue;
                 }
             }
         }
     }
 }
コード例 #9
0
        private static void InitialBoxtype(object obj)
        {
            TreeNode typenode = obj as TreeNode;

            try
            {
                DataTable dt_boxtype = sqlconnection.ExecuteDataTable(Constant.strConnectSQL_T, CommandType.Text, string.Format("select sgboxtype from {0}", Constant.Boxtype_sqlname), null);
                for (int m = 0; m < dt_boxtype.Rows.Count; m++)
                {
                    TreeNode subnode = new TreeNode();
                    subnode.Text       = Convert.ToString(dt_boxtype.Rows[m][0]);
                    subnode.ImageIndex = 2;
                    typenode.Nodes.Add(subnode);
                }
                Finished_Counter++;
                while (!Opened_flag)
                {
                    Thread.Sleep(1000);
                }
                UpdateTV(typenode);
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal(new TreeNodeHelper().GetType(), string.Format("初始化{0}节点信息时发生异常:{1}", typenode.Text, ex.StackTrace), ex);
                MessageBox.Show(ex.Message);
            }
        }
コード例 #10
0
        /// <summary>
        /// 设置请求头
        /// </summary>
        /// <param name="request"></param>
        /// <param name="headers"></param>
        public static void SetHeaders(HttpWebRequest request, Dictionary <string, string> headers)
        {
            if (headers != null)
            {
                foreach (var item in headers)
                {
                    try
                    {
                        switch (item.Key)
                        {
                        case "Referer":
                            request.Referer = item.Value;
                            break;

                        case "Connection":
                            break;

                        case "Keep-Alive":
                            break;

                        case "Content-Length":
                            request.ContentLength = item.Value.ToLong();
                            break;

                        case "Content-Type":
                            request.ContentType = item.Value;
                            break;

                        case "Accept":
                            request.Accept = item.Value;
                            break;

                        case "Host":
                            request.Host = item.Value;
                            break;

                        case "User-Agent":
                            request.UserAgent = item.Value;
                            break;

                        case "Expect":
                            request.Expect = item.Value;
                            break;

                        default:
                            request.Headers.Add(item.Key, item.Value);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log4netHelper.Fatal("SetHeaders异常" + item.Key, ex);
                    }
                }
            }
        }
コード例 #11
0
        /// <summary>
        ///接收消息
        /// </summary>
        /// <returns></returns>
        private byte[] Receive(byte[] buffer)
        {
            int receiveBytes = 0;

            try
            {
                var receive_buffer = new byte[Receive_Buffer_Size];
                receiveBytes = this.Socket.Receive(receive_buffer); //receiveBytes长度小于等于buffer的长度
                byte[] add_buffer      = null;                      //新接收到的数据
                byte[] transfer_buffer = null;                      //中转变量,存储已经接收到的数据
                while (this.Socket.Available > 0)
                {
                    add_buffer = new byte[Receive_Buffer_Size];
                    var add_receiveBytes = this.Socket.Receive(add_buffer);

                    receiveBytes += add_receiveBytes;
                    //创建新增存储对象
                    transfer_buffer = new byte[receiveBytes];
                    //将历史数据复制到新的存储对象
                    Array.Copy(receive_buffer, 0, transfer_buffer, 0, receiveBytes - add_receiveBytes);
                    //将新增的数据复制打中转存储对象
                    Array.Copy(add_buffer, 0, transfer_buffer, receiveBytes - add_receiveBytes, add_receiveBytes);
                    receive_buffer = transfer_buffer;
                }
                if (receiveBytes <= 0)
                {
                    Log4netHelper.Debug($"接受到服务端{this.ToJson()}{receiveBytes}个字节,自动关闭连接");
                    this.Close(new Exception($"接受到服务端{receiveBytes}个字节,自动关闭连接"));
                }
                if (buffer != null)
                {
                    transfer_buffer = new byte[buffer.Length + receive_buffer.Length];
                    Array.Copy(buffer, 0, transfer_buffer, 0, buffer.Length);
                    Array.Copy(receive_buffer, 0, transfer_buffer, buffer.Length, receive_buffer.Length);
                    return(transfer_buffer);
                }
                else
                {
                    if (receiveBytes < receive_buffer.Length)
                    {
                        return(receive_buffer.Take(receiveBytes).ToArray());
                    }
                    return(receive_buffer);
                }
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal($"客户端{this.ToJson()}接受消息时异常,自动关闭连接", ex);
                this.Close(ex);
                if (this.ReciveExceptionCallback != null)
                {
                    this.ReciveExceptionCallback(ex);
                }
            }
            return(null);
        }
コード例 #12
0
        public static string HttpPost(string url, Dictionary <string, string> param, Dictionary <string, string> headers = null, string charset = "UTF-8", int timeout = 15000)
        {
            var data = GenderParamString(param);

            return(Policy.Handle <WebException>().WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)), (ex, timer, c, context) =>
            {
                Log4netHelper.Fatal("HttpPost异常", ex);
                Log4netHelper.Fatal($"执行失败! 重试次数 {c} timer={timer.ToString()}i={context.ToJson()}");
            }).Execute(() =>
            {
                return HttpPost(url, data, headers, charset, timeout);
            }));
        }
コード例 #13
0
 /// <summary>
 /// 启动
 /// </summary>
 public void Start()
 {
     Task.Run(() =>
     {
         try
         {
             Receive();
         }
         catch (Exception ex)
         {
             Log4netHelper.Fatal($"会话在接受消息是发生异常{Environment.NewLine}会话={JsonHelper.SerializeObject(this)}", ex);
         }
     });
 }
コード例 #14
0
 /// <summary>
 /// 以任务的形式运行指定委托方法
 /// 不引发异常,异步执行
 /// </summary>
 /// <param name="action"></param>
 public static void TaskRun(Action action)
 {
     Task.Run(() =>
     {
         try
         {
             action();
         }
         catch (Exception ex)
         {
             Log4netHelper.Fatal(ex);
         }
     });
 }
コード例 #15
0
 /// <summary>
 /// 以任务的形式运行指定委托方法
 /// 不引发异常,异步执行
 /// </summary>
 /// <param name="action"></param>
 public static void TaskRun(WaitCallback action, object state)
 {
     ThreadPool.QueueUserWorkItem((_state) =>
     {
         try
         {
             action(_state);
         }
         catch (Exception ex)
         {
             Log4netHelper.Fatal(ex);
         }
     }, state);
 }
コード例 #16
0
 /// <summary>
 /// 启动全部
 /// </summary>
 public void StartAll()
 {
     foreach (var client in GetList())
     {
         ThreadPool.QueueUserWorkItem((id) =>
         {
             Policy.Handle <Exception>().WaitAndRetryForever(retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)), (policy_ex, timer) =>
             {
                 Log4netHelper.Fatal($"连接服务端失败 timer={timer.TotalSeconds} ex={policy_ex.Message}", policy_ex);
             }).Execute(() =>
             {
                 Start(id.ToString());
             });
         }, client.Id);
     }
 }
コード例 #17
0
        /// <summary>
        /// 发送POTS 请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="data"></param>
        /// <param name="headers"></param>
        /// <param name="charset"></param>
        /// <returns></returns>
        private static string HttpPost(string url, string data, Dictionary <string, string> headers = null, string charset = "UTF-8", int timeout = 15000)
        {
#if DEBUG
            timeout = 1000 * 60 * 10;
#endif
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method            = "POST";
            request.ContentType       = "application/x-www-form-urlencoded";
            request.Accept            = "*/*";
            request.Timeout           = timeout;
            request.AllowAutoRedirect = false;
            SetHeaders(request, headers);
            byte[] paramBytes = Encoding.GetEncoding(charset).GetBytes(data);
            request.ContentLength = paramBytes.Length;
            string responseStr = string.Empty;
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(paramBytes, 0, paramBytes.Length);
                requestStream.Close();
                try
                {
                    var response = request.GetResponse();
                    if (response != null)
                    {
                        using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            responseStr = reader.ReadToEnd();
                        }
                    }
                }
                catch (WebException ex)
                {
                    Log4netHelper.Fatal("HttpPost异常", ex);
                    var response = (HttpWebResponse)ex.Response;
                    using (Stream stream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            responseStr = reader.ReadToEnd();
                        }
                    }
                    Log4netHelper.Debug(url, responseStr);
                    throw ex;
                }
                return(responseStr);
            }
        }
コード例 #18
0
        public void Copy(object sender, EventArgs e)
        {
            try
            {
                dataGridViewX1.EndEdit();

                if (tabControl1.SelectedTabIndex == 0)
                {
                    DgdDealHelper.SetDataGridVIewToClipboard(dataGridViewX1);
                    //UIHelper.ToastNotify(true, "正式生产表数据已复制到粘贴板!", tabControl1);
                }
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal(this.GetType(), "复制时发生异常:", ex);
            }
        }
コード例 #19
0
        private void SecondInitalCheckbox(object obj)
        {
            FlowLayoutPanel flowpanel = obj as FlowLayoutPanel;

            try
            {
                if (!this.IsHandleCreated || this.IsDisposed)
                {
                    return;
                }
                if (InvokeRequired)
                {
                    this.Invoke((MethodInvoker) delegate
                    {
                        for (int i = 0; i < flowpanel.Controls.Count; i++)
                        {
                            CheckBox update_ck = flowpanel.Controls[i] as CheckBox;
                            if (old_capacity_str.Contains(update_ck.Text))
                            {
                                update_ck.Checked = true;
                            }
                            if (flowpanel.Name == "Analog")
                            {
                                Analog_flowpanel.Controls.Add(update_ck);
                            }
                            else
                            {
                                Digital_flowpanel.Controls.Add(update_ck);
                            }
                            progressBarX1.Value += 1;
                            progressBarX1.Text   = ((double)progressBarX1.Value / progressBarX1.Maximum).ToString("P");
                            if (progressBarX1.Value == progressBarX1.Maximum)
                            {
                                progressBarX1.Visible = false;
                            }
                            Application.DoEvents();
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal(this.GetType(), "再次载入传感器容量时异常:", ex);
                throw ex;
            }
        }
コード例 #20
0
 /// <summary>
 /// 异步运行接受消息回调
 /// </summary>
 /// <param name="msg"></param>
 void ReceiveCallbackAsync(SocketSession session, string msg)
 {
     if (ReceiveCallback == null)
     {
         return;
     }
     Task.Run(() =>
     {
         try
         {
             ReceiveCallback(session, msg);
         }
         catch (Exception ex)
         {
             Log4netHelper.Fatal($"服务端接收到消息但执行ReceiveCallback异常:{msg}", ex);
         }
     });
 }
コード例 #21
0
 public static void CreateBomNode(TreeNode BOMnode)
 {
     try
     {
         for (int k = 0; k < Constant.MainTree_list.Count; k++)
         {
             TreeNode bominfo_node = new TreeNode();
             bominfo_node.Text       = Constant.MainTree_list[k];
             bominfo_node.Tag        = BOMnode.Tag;//加载唯一识别号
             bominfo_node.ImageIndex = 1;
             BOMnode.Nodes.Add(bominfo_node);
         }
     }
     catch (Exception ex)
     {
         Log4netHelper.Fatal(new TreeNodeHelper().GetType(), string.Format("创建物料号BOM{0}节点信息时发生异常", BOMnode.Text), ex);
         MessageBox.Show(ex.Message);
     }
 }
コード例 #22
0
ファイル: CachePool.cs プロジェクト: JieWenDC/JW.RequestRelay
 /// <summary>
 /// 自动清理缓存项
 /// </summary>
 public void AutoClear(object sender, ElapsedEventArgs e)
 {
     try
     {
         var nowTime = DateTime.Now;
         if (this.Timeout > 0)
         {
             if (this.ExpireType == CacheExpireTypeEnum.Absolute)
             {
                 foreach (var cache in this.CACHE_POOL)
                 {
                     DateTime createTime;
                     if (this.CACHE_POOL_CreateTime.TryGetValue(cache.Key, out createTime))
                     {
                         if (createTime.AddMinutes(this.Timeout) < nowTime)
                         {
                             this.Remove(cache.Key);
                         }
                     }
                 }
             }
             if (this.ExpireType == CacheExpireTypeEnum.Adjustable)
             {
                 foreach (var cache in this.CACHE_POOL)
                 {
                     DateTime lastAccessTime;
                     if (this.CACHE_POOL_LastAccessTime.TryGetValue(cache.Key, out lastAccessTime))
                     {
                         if (lastAccessTime.AddMinutes(this.Timeout) < nowTime)
                         {
                             this.Remove(cache.Key);
                         }
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Log4netHelper.Fatal("缓存自动清理异常", ex);
     }
 }
コード例 #23
0
        public static void InitialBasicNode(object obj)
        {
            try
            {
                TreeNode typenode = new TreeNode();
                typenode.Text       = Constant.Boxtype_dt.TableName;//修改名称
                typenode.ImageIndex = 1;

                TreeNode classnode0 = new TreeNode();
                classnode0.Text       = "模拟传感器";
                classnode0.ImageIndex = 1;

                TreeNode classnode1 = new TreeNode();
                classnode1.Text       = "数字传感器";
                classnode1.ImageIndex = 1;

                TreeNode gluenode = new TreeNode();
                gluenode.Text       = Constant.Sgglue_dt.TableName;
                gluenode.ImageIndex = 1;

                TreeNode sgnode = new TreeNode();
                sgnode.Text       = Constant.Sgseries_dt.TableName;
                sgnode.ImageIndex = 1;

                ThreadPool.QueueUserWorkItem(new WaitCallback(InitialBoxtype), typenode);
                ThreadPool.QueueUserWorkItem(new WaitCallback(InitialProductClass), classnode0);
                ThreadPool.QueueUserWorkItem(new WaitCallback(InitialProductClass), classnode1);

                ThreadPool.QueueUserWorkItem(new WaitCallback(InitialGlueBom), gluenode);
                ThreadPool.QueueUserWorkItem(new WaitCallback(InitialSgBom), sgnode);
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal(new TreeNodeHelper().GetType(), "初始化基本导航信息时发生异常", ex);
                MessageBox.Show(ex.Message);
            }
        }
コード例 #24
0
 /// <summary>
 /// 启动
 /// </summary>
 public void Start()
 {
     try
     {
         Socket.Connect(IPE);
         if (!Socket.Connected)
         {
             throw new Exception($"{this.LocalAddress}与{IPE.Address.ToString()}建立连接失败,状态为={this.Socket.Connected}");
         }
     }
     catch (Exception ex)
     {
         if (this.ConnectCallback != null)
         {
             this.ConnectCallback(ex);
         }
         throw ex;
     }
     this.LocalAddress = ((System.Net.IPEndPoint) this.Socket.LocalEndPoint).ToString();
     Log4netHelper.Debug($"{this.LocalAddress}已建立与{IPE.Address.ToString()}的连接");
     if (this.ConnectCallback != null)
     {
         this.ConnectCallback(null);
     }
     TrySetKeepAlive(5, 5);
     Task.Run(() =>
     {
         try
         {
             Receive();
         }
         catch (Exception ex)
         {
             Log4netHelper.Fatal("Recive异常", ex);
         }
     });
 }
コード例 #25
0
        /// <summary>
        /// 接受连接
        /// </summary>
        /// <param name="ar"></param>
        private void BeginAcceptConnection(IAsyncResult ar)
        {
            if (this.IsDisposable)
            {
                return;
            }
            var socket         = SOCKET_SERVER.EndAccept(ar);
            var remoteEndPoint = ((System.Net.IPEndPoint)socket.RemoteEndPoint);

            Log4netHelper.Debug($"{remoteEndPoint.Address.ToString()}连接到了本服务端");
            var session = new SocketSession(socket)
            {
                Id              = Guid.NewGuid().ToString(),
                RemoteEndPoint  = socket.RemoteEndPoint,
                ReceiveCallback = (obj, msg) =>
                {
                    try
                    {
                        ReceiveEvent(obj, msg);
                    }
                    catch (Exception ex)
                    {
                        Log4netHelper.Fatal($"服务端在执行ReceiveEvent事件时发生异常{Environment.NewLine}消息内容{msg}{Environment.NewLine}会话{JsonHelper.SerializeObject(obj)}", ex);
                    }
                },
                DisposeCallback = (obj) =>
                {
                    SESSIONS.Remove(obj);
                },
            };

            session.Start();
            SESSIONS.Add(session);
            SOCKET_SERVER.BeginAccept(new AsyncCallback(BeginAcceptConnection), null);
            AcceptConnectionEvent(session, null);
        }
コード例 #26
0
        private void InitialCheckbox(object lc_dt)
        {
            DataTable capacity_dt = lc_dt as DataTable;

            try
            {
                Constant.Capacity_Combine_str = "";
                for (int i = 0; i < capacity_dt.Rows.Count; i++)
                {
                    if (!this.IsHandleCreated || this.IsDisposed)
                    {
                        return;
                    }
                    if (InvokeRequired)
                    {
                        this.Invoke((MethodInvoker) delegate
                        {
                            CheckBox chkBox = new CheckBox();
                            chkBox.Name     = string.Format("checkbox{0}", i + 1);
                            if (!string.IsNullOrEmpty(capacity_dt.Rows[i][0].ToString()))
                            {
                                chkBox.Text = capacity_dt.Rows[i][0].ToString().Replace("-", "");
                                if (old_capacity_str.Contains(chkBox.Text))
                                {
                                    chkBox.Checked = true;
                                }

                                chkBox.AutoSize = true;                             //若不设置此属性,会出现比较多的白色边框,比较难看
                                chkBox.Location = new System.Drawing.Point(-1, -1); //相对位置:左上角
                                //chkBox.Image = global::GageRobot.Properties.Resources.robot3;
                                //chkBox.Font = new System.Drawing.Font("宋体", 8F);
                                //chkBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                                //chkBox.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
                                chkBox.CheckedChanged += new System.EventHandler(this.checkbox_CheckedChanged);
                                if (capacity_dt.TableName == "模拟传感器")
                                {
                                    Analog_flowpanel.Controls.Add(chkBox);
                                }
                                else
                                {
                                    Digital_flowpanel.Controls.Add(chkBox);
                                }

                                progressBarX1.Value += 1;
                                progressBarX1.Text   = ((double)progressBarX1.Value / progressBarX1.Maximum).ToString("P");
                                if (progressBarX1.Value == progressBarX1.Maximum)
                                {
                                    progressBarX1.Visible = false;
                                }
                            }
                            Application.DoEvents();
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal(this.GetType(), "载入传感器容量时异常:", ex);
                throw ex;
            }
        }
コード例 #27
0
        /// <summary>
        /// 转发
        /// </summary>
        /// <returns></returns>
        private async Task Relay(ClientModel clientModel, SocketClient socketClient, Log log, string message)
        {
            RequestModel  request  = null;
            ResponseModel response = null;

            #region 解析消息
            try
            {
                request = JsonHelper.DeserializeObject <RequestModel>(message);
            }
            catch (Exception ex)
            {
                log.Stage = "解析请求参数异常";
                AsyncHelper.TaskRun(() =>
                {
                    ProcessCallback(clientModel, socketClient, log);
                });
                ex       = Log4netHelper.GetRealException(ex);
                response = new ResponseModel()
                {
                    Response = Encoding.UTF8.GetBytes(ex.Message),
                };
                log.Content += $"{Environment.NewLine}解析消息异常:{ex}";
                Log4netHelper.Fatal($"解析消息异常:{message}", ex);
            }
            log.Request = request;
            #endregion

            #region 转发
            if (request != null)
            {
                try
                {
                    log.StartHttpRelayTime = DateTime.Now;
                    var url = clientModel.HandleUrl;
                    url       = string.Format("{0}{1}", clientModel.HandleUrl, request.UrlPathAndQuery);
                    log.Stage = "开始转发请求";
                    AsyncHelper.TaskRun(() =>
                    {
                        ProcessCallback(clientModel, socketClient, log);
                    });
                    response = await HttpRelayHelper.HttpRelayAsync(url, request);

                    log.Stage = "收到请求响应";
                    AsyncHelper.TaskRun(() =>
                    {
                        ProcessCallback(clientModel, socketClient, log);
                    });
                    log.EndHttpRelayTime = DateTime.Now;
                    log.Relay            = true;
                }
                catch (Exception ex)
                {
                    log.Stage = "转发请求异常";
                    AsyncHelper.TaskRun(() =>
                    {
                        ProcessCallback(clientModel, socketClient, log);
                    });
                    response = new ResponseModel()
                    {
                        Response = Encoding.UTF8.GetBytes(ex.Message),
                        Id       = request.Id,
                    };
                    log.Relay    = false;
                    log.Content += $"{Environment.NewLine}转发消息异常:{ex}";
                }
            }
            #endregion

            log.Response = response;

            SocketClient reply_socket = null;
            Policy.Handle <Exception>().WaitAndRetryForever(retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)), (policy_ex, timer) =>
            {
                log.Stage = "回复异常";
                AsyncHelper.TaskRun(() =>
                {
                    ProcessCallback(clientModel, socketClient, log);
                });
            }).Execute(() =>
            {
                #region 确保当前客户端状态可用

                if (socketClient.IsDisposable || !socketClient.Socket.Connected)
                {
                    log.Content += $"{Environment.NewLine}客户端已被释放,开始创建新的客户端";
                    reply_socket = clientModel.GetOneFreeOnlineClient();
                    if (reply_socket != null)
                    {
                        if (reply_socket.IsDisposable || !reply_socket.Socket.Connected)
                        {
                            log.Content += $"{Environment.NewLine}客户端已被释放,开始创建新的客户端";
                            Policy.Handle <Exception>().WaitAndRetryForever(retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)), (policy_ex, timer) =>
                            {
                                log.Stage = "无可用客户端,创建客户端异常";
                                AsyncHelper.TaskRun(() =>
                                {
                                    ProcessCallback(clientModel, socketClient, log);
                                });
                                log.Content += $"{Environment.NewLine}创建新的客户端异常:{policy_ex}";
                            }).Execute(() =>
                            {
                                reply_socket = clientModel.CreateSession();
                            });
                        }
                    }
                    else
                    {
                        reply_socket = clientModel.CreateSession();
                    }
                }
                else
                {
                    reply_socket = socketClient;
                }

                #endregion

                #region 回复

                log.Stage = "开始回复";
                AsyncHelper.TaskRun(() =>
                {
                    ProcessCallback(clientModel, socketClient, log);
                });
                reply_socket.Send(response);
                #endregion
            });

            log.Stage = "回复完毕";
            AsyncHelper.TaskRun(() =>
            {
                ProcessCallback(clientModel, socketClient, log);
            });
            log.Reply            = true;
            log.ResponseDateTime = DateTime.Now;
            if (ProcessedCallback != null)
            {
                ProcessedCallback(clientModel, reply_socket, log);
            }
        }
コード例 #28
0
        public static async Task <ResponseModel> HttpRelayAsync(string url, RequestModel param)
        {
            var ret = new ResponseModel()
            {
                Id = param.Id,
            };
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

            request.Method = param.HttpMethod;
            foreach (var item in param.Headers)
            {
                try
                {
                    switch (item.Key)
                    {
                    case "Referer":
                        request.Referer = item.Value;
                        break;

                    case "Connection":
                        break;

                    case "Keep-Alive":
                        break;

                    case "Content-Length":
                        request.ContentLength = item.Value.ToLong();
                        break;

                    case "Content-Type":
                        request.ContentType = item.Value;
                        break;

                    case "Accept":
                        request.Accept = item.Value;
                        break;

                    case "Host":
                        request.Host = item.Value;
                        break;

                    case "User-Agent":
                        request.UserAgent = item.Value;
                        break;

                    default:
                        request.Headers.Add(item.Key, item.Value);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    Log4netHelper.Fatal($"设置头信息{item.Key}={item.Value}异常", ex);
                }
            }
            if (param.InputStream.Length > 0)
            {
                byte[] param_form_bytes = param.InputStream;
                request.ContentLength = param_form_bytes.Length;
                using (Stream requestStream = await request.GetRequestStreamAsync())
                {
                    try
                    {
                        requestStream.Write(param_form_bytes, 0, param_form_bytes.Length);
                        requestStream.Close();
                    }
                    catch (Exception ex)
                    {
                        Log4netHelper.Fatal($"写入请求流异常", ex);
                        throw;
                    }
                }
            }

            HttpWebResponse response = null;

            try
            {
                response = (HttpWebResponse)await request.GetResponseAsync();
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse)ex.Response;
            }
            finally
            {
                if (response != null)
                {
                    ret.StatusCode = response.StatusCode;
                    if (response.ContentLength > 0)
                    {
                        ret.Response = new byte[response.ContentLength];
                        var responseStream = response.GetResponseStream();
                        var conetntLength  = (int)response.ContentLength;
                        var read_byte      = await responseStream.ReadAsync(ret.Response, 0, conetntLength);

                        while (read_byte != response.ContentLength)
                        {
                            read_byte += await responseStream.ReadAsync(ret.Response, read_byte, conetntLength - read_byte);
                        }
                    }
                    else
                    {
                        ret.Response = new byte[0];
                    }
                    ret.Headers = response.Headers.ToDictionary();
                    if (response.Cookies != null && response.Cookies.Count > 0)
                    {
                        ret.HttpCookies = new List <Models.Http.HttpCookie>(response.Cookies.Count);
                        foreach (Cookie cookie in response.Cookies)
                        {
                            ret.HttpCookies.Add(new Models.Http.HttpCookie()
                            {
                                Domain   = cookie.Domain,
                                Expires  = cookie.Expires,
                                HttpOnly = cookie.HttpOnly,
                                Name     = cookie.Name,
                                Path     = cookie.Path,
                                Secure   = cookie.Secure,
                                Value    = cookie.Value,
                            });
                        }
                    }
                }
            }
            return(ret);
        }
コード例 #29
0
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="url"></param>
        /// <param name="data"></param>
        /// <param name="filePath"></param>
        /// <param name="headers"></param>
        /// <param name="charset"></param>
        /// <returns></returns>
        public static string UploadFile(string url, Dictionary <string, string> data, string filePath, Dictionary <string, string> headers = null, string charset = "UTF-8")
        {
            var policy = Policy.Handle <WebException>().WaitAndRetry(5,
                                                                     retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)),
                                                                     (ex, timer, c, context) =>
            {
                Log4netHelper.Fatal("UploadFile异常", ex);
                Log4netHelper.Fatal($"执行失败! 重试次数 {c} timer={timer.ToString()}i={context.ToJson()}");
            });

            return(policy.Execute(() =>
            {
                // 设置参数
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                SetHeaders(request, headers);

                string boundary = DateTime.Now.Ticks.ToString("X");  // 随机分隔线
                request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
                byte[] start_BoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
                byte[] end_BoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
                string fileName = FileHelper.GetFileName(filePath, true);
                //请求头部信息
                StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());
                //POST请求数据
                var postData = new List <byte[]>();
                if (data != null)
                {
                    foreach (var item in data)
                    {
                        var str = string.Format("\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}", boundary, item.Key, item.Value);
                        byte[] postBytes = Encoding.GetEncoding(charset).GetBytes(str);
                        postData.Add(postBytes);
                    }
                }

                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    byte[] bArr = new byte[fs.Length];
                    fs.Read(bArr, 0, bArr.Length);
                    request.ContentLength = start_BoundaryBytes.Length + postHeaderBytes.Length + bArr.Length + end_BoundaryBytes.Length;
                    if (postData.ExistsData())
                    {
                        request.ContentLength = request.ContentLength + postData.Sum(row => row.Length);
                    }
                    using (Stream postStream = request.GetRequestStream())
                    {
                        postStream.Write(start_BoundaryBytes, 0, start_BoundaryBytes.Length);
                        postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                        postStream.Write(bArr, 0, bArr.Length);
                        if (postData.ExistsData())
                        {
                            postData.ForEach(item =>
                            {
                                postStream.Write(item, 0, item.Length);
                            });
                        }
                        postStream.Write(end_BoundaryBytes, 0, end_BoundaryBytes.Length);
                        //发送请求并获取相应回应数据
                        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                        {
                            //直到request.GetResponse()程序才开始向目标网页发送Post请求
                            using (Stream instream = response.GetResponseStream())
                            {
                                using (StreamReader sr = new StreamReader(instream, Encoding.UTF8))
                                {
                                    //返回结果网页(html)代码
                                    string content = sr.ReadToEnd();
                                    return content;
                                }
                            }
                        }
                    }
                }
            }));
        }
コード例 #30
0
ファイル: CapacityForm.cs プロジェクト: GaryHan4451/MTStorage
        private void Initial_ListView(object obj)
        {
            DataTable capacity_dt    = obj as DataTable;
            int       Listview_count = 0;
            int       Average_count  = 0;

            if (capacity_dt.TableName == "模拟传感器")
            {
                Listview_count = 4;
            }
            else
            {
                Listview_count = 3;
            }
            Average_count = capacity_dt.Rows.Count / Listview_count;
            try
            {
                if (!this.IsHandleCreated || this.IsDisposed)
                {
                    return;
                }
                if (InvokeRequired)
                {
                    this.Invoke((MethodInvoker) delegate
                    {
                        for (int i = 0; i < Listview_count + 1; i++)
                        {
                            ListViewEx lv     = new ListViewEx();
                            lv.Height         = Analog_flowpanel.Height - 10;
                            lv.Width          = (tabControl1.Width / (Listview_count + 1)) - 15;
                            lv.View           = View.Details;
                            lv.FullRowSelect  = true;
                            lv.HeaderStyle    = ColumnHeaderStyle.Clickable;
                            lv.View           = View.Details;
                            lv.SmallImageList = this.imageList1;  //将listView的图标集与imageList1绑定
                            lv.CheckBoxes     = true;
                            lv.View           = View.Details;
                            lv.GridLines      = true;                                     //显示网格线
                            lv.Items.Clear();                                             //所有的项
                            lv.Columns.Clear();                                           //标题
                            lv.Columns.Add("容量选择", 120, HorizontalAlignment.Left);        //增加标题
                            lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); //调整列的宽度
                            lv.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.listViewEx_ItemChecked);
                            if (capacity_dt.TableName == "模拟传感器")
                            {
                                Analog_flowpanel.Controls.Add(lv);
                            }
                            else
                            {
                                Digital_flowpanel.Controls.Add(lv);
                            }

                            for (int j = i * Average_count; j < (i + 1) * Average_count; j++)
                            {
                                if (j < (i + 1) * Average_count && j < capacity_dt.Rows.Count)
                                {
                                    if (string.IsNullOrEmpty(Convert.ToString(capacity_dt.Rows[j][0])))
                                    {
                                        UIHelper.ToastNotify(false, "有容量为空!", tabControl1);
                                    }
                                    ListViewItem lvi = new ListViewItem(capacity_dt.Rows[j][0].ToString());
                                    lvi.ImageIndex   = 0;

                                    if (old_capacity_str.Contains(lvi.Text.Replace("-", "")))
                                    {
                                        lvi.Checked = true;
                                    }
                                    lv.Items.Add(lvi);
                                    //进度条
                                    progressBarX1.Value += 1;
                                    progressBarX1.Text   = ((double)progressBarX1.Value / progressBarX1.Maximum).ToString("P");
                                    if (progressBarX1.Value == progressBarX1.Maximum)
                                    {
                                        progressBarX1.Visible = false;
                                    }
                                    Application.DoEvents();
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                Log4netHelper.Fatal(this.GetType(), "初始化Listview时异常:" + ex.Message);
                throw ex;
            }
        }