コード例 #1
0
ファイル: NetworkTarget.cs プロジェクト: modulexcite/SQLoogle
        private void ChunkedSend(NetworkSender sender, byte[] buffer, AsyncContinuation continuation)
        {
            var tosend = buffer.Length;
            var pos = 0;

            AsyncContinuation sendNextChunk = null;

            sendNextChunk = ex =>
                                {
                                    if (ex != null)
                                    {
                                        continuation(ex);
                                        return;
                                    }

                                    if (tosend <= 0)
                                    {
                                        continuation(null);
                                        return;
                                    }

                                    var chunksize = tosend;
                                    if (chunksize > MaxMessageSize)
                                    {
                                        if (OnOverflow == NetworkTargetOverflowAction.Discard)
                                        {
                                            continuation(null);
                                            return;
                                        }

                                        if (OnOverflow == NetworkTargetOverflowAction.Error)
                                        {
                                            continuation(new OverflowException("Attempted to send a message larger than MaxMessageSize (" + MaxMessageSize + "). Actual size was: " + buffer.Length + ". Adjust OnOverflow and MaxMessageSize parameters accordingly."));
                                            return;
                                        }

                                        chunksize = MaxMessageSize;
                                    }

                                    var pos0 = pos;
                                    tosend -= chunksize;
                                    pos += chunksize;

                                    sender.Send(buffer, pos0, chunksize, sendNextChunk);
                                };

            sendNextChunk(null);
        }