public void SendAsync(byte[] bytes) { if (IsClient) { var block = BufferPool.Pop(); var writeArgs = SocketPool.Pop(); // TODO: loop in case byte[] is greater than block capacity!!! var writeSize = (bytes.Length < block.Capacity) ? bytes.Length : block.Capacity; System.Buffer.BlockCopy(bytes, 0, block.Bytes, block.Offset, writeSize); ((MiniNet.Buffers.Buffer)block).Size = writeSize; writeArgs.UserToken = block; writeArgs.AcceptSocket = BaseSocket; writeArgs.SetBuffer(block.Bytes, block.Offset, block.Size); writeArgs.Completed += OnSocketCompleted; var willRaiseEvent = BaseSocket.SendAsync(writeArgs); if (!willRaiseEvent) { SendHandle(writeArgs); } } else { RaiseFault("Only accepted client sockets may read and write."); } }
public void AcceptAsync() { if (!IsClient) { var acceptArgs = SocketPool.Pop(); acceptArgs.Completed += OnSocketCompleted; var willRaiseEvent = BaseSocket.AcceptAsync(acceptArgs); if (!willRaiseEvent) { AcceptHandle(acceptArgs); } } else { RaiseFault("Unable to create connections on a client socket."); } }
public void ReceiveAsync() { if (IsClient) { var block = BufferPool.Pop(); var readArgs = SocketPool.Pop(); readArgs.UserToken = block; readArgs.AcceptSocket = BaseSocket; readArgs.SetBuffer(block.Bytes, block.Offset, block.Capacity); readArgs.Completed += OnSocketCompleted; var willRaiseEvent = BaseSocket.ReceiveAsync(readArgs); if (!willRaiseEvent) { ReceiveHandle(readArgs); } } else { RaiseFault("Only accepted client sockets may read and write."); } }