private void recieveCallback(IAsyncResult ar) { try { packageState package = ar.AsyncState as packageState; Socket clientS = package.socket; int bytesRead = clientS.EndReceive(ar); if (bytesRead > 0) { int size = ATclient.BUFFER_SIZE; if (package.readOffset == -1) { size = BitConverter.ToInt32(package.sizeBuffer, 0); package.readBuffer = new byte[size]; package.readOffset = 0; } else { package.readOffset += bytesRead; if (package.readOffset == package.readBuffer.Length) { //clone array so the package can be disposed byte[] temp = package.readBuffer.Clone() as byte[]; //invoke the event recievingData?.Invoke(temp); //free memory package.Dispose(); package = new packageState(clientS); } } if (package.readBuffer == null) { package.socket.BeginReceive(package.sizeBuffer, 0, package.sizeBuffer.Length, SocketFlags.None, new AsyncCallback(recieveCallback), package); } else { int readsize = (ATclient.BUFFER_SIZE > size) ? size : ATclient.BUFFER_SIZE; package.socket.BeginReceive(package.readBuffer, package.readOffset, readsize, SocketFlags.None, new AsyncCallback(recieveCallback), package); } } else { connected = false; log("Error recieving Message! ReadBytes < 0."); } } catch { connected = false; log("Error recieving Message!"); } }
private void connectCallback(IAsyncResult ar) { try { Socket tempS = ar.AsyncState as Socket; tempS.EndConnect(ar); log("Connected."); connected = true; packageState package = new packageState(tempS); tempS.BeginReceive(package.sizeBuffer, 0, package.sizeBuffer.Length, SocketFlags.None, new AsyncCallback(recieveCallback), package); } catch { connected = false; log("Failed to connect to Server."); } }