void ReceiveBitEventHander(object obj) { WeaveEvent me = (WeaveEvent)obj; weaveReceiveBitEvent?.Invoke(me.Command, me.Databit, me.Soc); }
/// <summary> /// 对粘包,分包的处理方法 /// </summary> /// <param name="obj"></param> private void packageData(object obj) { WeaveNetWorkItems netc = obj as WeaveNetWorkItems; List <byte[]> ListData = netc.DataList; try { int i = 0; int count = ListData.Count; if (count > 0) { int bytesRead = ListData[i] != null ? ListData[i].Length : 0; if (bytesRead == 0) { if (ListData.Count > 0) { ListData.RemoveAt(0); } netc.IsPage = false; return; } ; byte[] tempbtye = new byte[bytesRead]; Array.Copy(ListData[i], tempbtye, tempbtye.Length); if (bytesRead > 2) { int a = tempbtye[1]; if (bytesRead > 2 + a) { int len = 0; if (weaveDataType == WeaveDataTypeEnum.Bytes) { byte[] bb = new byte[a]; Array.Copy(tempbtye, 2, bb, 0, a); len = ConvertToInt(bb); } else { String temp = System.Text.Encoding.UTF8.GetString(tempbtye, 2, a); len = int.Parse(temp); } if ((len + 2 + a) > tempbtye.Length) { try { if (ListData.Count > 1) { ListData.RemoveAt(i); byte[] temps = new byte[tempbtye.Length]; Array.Copy(tempbtye, temps, temps.Length); byte[] tempbtyes = new byte[temps.Length + ListData[i].Length]; Array.Copy(temps, tempbtyes, temps.Length); Array.Copy(ListData[i], 0, tempbtyes, temps.Length, ListData[i].Length); ListData[i] = tempbtyes; } } catch { } netc.IsPage = false; return; } else if (tempbtye.Length > (len + 2 + a)) { try { byte[] temps = new byte[tempbtye.Length - (len + 2 + a)]; Array.Copy(tempbtye, (len + 2 + a), temps, 0, temps.Length); ListData[i] = temps; } catch { } // netc.Ispage = false; return; } else if (tempbtye.Length == (len + 2 + a)) { if (ListData.Count > 0) { ListData.RemoveAt(i); } } try { if (weaveDataType == WeaveDataTypeEnum.Json) { String temp = System.Text.Encoding.UTF8.GetString(tempbtye, 2 + a, len); WeaveEvent me = new WeaveEvent(); me.Command = tempbtye[0]; me.Data = temp; me.Soc = netc.SocketSession; if (waveReceiveEvent != null) { System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ReceiveEventHander), me); } //receiveeventto(me); //if (receiveevent != null) // receiveevent.BeginInvoke(tempbtye[0], temp, netc.Soc, null, null); //if (ListData.Count > 0) ListData.RemoveAt(i); } else if (weaveDataType == WeaveDataTypeEnum.Bytes) { // temp = System.Text.Encoding.UTF8.GetString(tempbtye, 2 + a, len); byte[] bs = new byte[len]; Array.Copy(tempbtye, (2 + a), bs, 0, bs.Length); WeaveEvent me = new WeaveEvent(); me.Command = tempbtye[0]; me.Data = ""; me.Databit = bs; me.Soc = netc.SocketSession; if (weaveReceiveBitEvent != null) { System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ReceiveBitEventHander), me); } } netc.IsPage = false; return; } catch //(Exception e) { netc.IsPage = false; return; } } else { if (ListData.Count > 0) { ListData.RemoveAt(i); byte[] temps = new byte[tempbtye.Length]; Array.Copy(tempbtye, temps, temps.Length); byte[] tempbtyes = new byte[temps.Length + ListData[i].Length]; Array.Copy(temps, tempbtyes, temps.Length); Array.Copy(ListData[i], 0, tempbtyes, temps.Length, ListData[i].Length); ListData[i] = tempbtyes; } netc.IsPage = false; return; } } else { try { if (ListData.Count > 1) { ListData.RemoveAt(i); byte[] temps = new byte[tempbtye.Length]; Array.Copy(tempbtye, temps, temps.Length); byte[] tempbtyes = new byte[temps.Length + ListData[i].Length]; Array.Copy(temps, tempbtyes, temps.Length); Array.Copy(ListData[i], 0, tempbtyes, temps.Length, ListData[i].Length); ListData[i] = tempbtyes; } } catch { } netc.IsPage = false; return; } } } catch //(Exception e) { try { if (netc.DataList.Count > 0) { netc.DataList.RemoveAt(0); } netc.IsPage = false; } catch { } return; } finally { netc.IsPage = false; } }
void ReceiveToEventHanderssl(object obj) { WeaveEvent me = (WeaveEvent)obj; WeaveReceiveSslEvent?.Invoke(me.Command, me.Data, me.Ssl); }