aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/DrawingBoard/SkNetPipeController.cpp
diff options
context:
space:
mode:
authorGravatar yangsu@google.com <yangsu@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-08 15:12:05 +0000
committerGravatar yangsu@google.com <yangsu@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-08 15:12:05 +0000
commitf3493f0e1f92a8a284adb93ecbf350401e1c7423 (patch)
tree6a2e7b99bbcbf566b184b8789c4452ee175f9ff1 /experimental/DrawingBoard/SkNetPipeController.cpp
parent0168afc7196fe82da8af230c93c56f3035d54d2b (diff)
iOS/Cocoa SampleApp, Drawingboard, and Networking updates
Diffstat (limited to 'experimental/DrawingBoard/SkNetPipeController.cpp')
-rw-r--r--experimental/DrawingBoard/SkNetPipeController.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/experimental/DrawingBoard/SkNetPipeController.cpp b/experimental/DrawingBoard/SkNetPipeController.cpp
new file mode 100644
index 0000000000..01a844b616
--- /dev/null
+++ b/experimental/DrawingBoard/SkNetPipeController.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#include "SkNetPipeController.h"
+
+SkNetPipeController::SkNetPipeController(SkCanvas* target) : fReader(target) {
+ fBlock = NULL;
+ fBlockSize = fBytesWritten = 0;
+ fPlayback = true;
+ fStatus = SkGPipeReader::kDone_Status;
+ fTotalWritten = 0;
+ fAtomsWritten = 0;
+}
+SkNetPipeController::~SkNetPipeController() {
+ sk_free(fBlock);
+}
+
+int SkNetPipeController::writeToSocket(SkSocket* sockfd, SkSocket::DataType type) {
+ if (NULL != sockfd && fTotalWritten > 4)
+ return sockfd->writePacket(fBlock, fBytesWritten, type);
+ else
+ return -1;
+}
+
+void* SkNetPipeController::requestBlock(size_t minRequest, size_t* actual) {
+ sk_free(fBlock);
+
+ fBlockSize = minRequest * 4;
+ fBlock = sk_malloc_throw(fBlockSize);
+ fBytesWritten = 0;
+ *actual = fBlockSize;
+ return fBlock;
+}
+
+void SkNetPipeController::notifyWritten(size_t bytes) {
+ SkASSERT(fBytesWritten + bytes <= fBlockSize);
+
+ if (fPlayback) {
+ fStatus = fReader.playback((const char*)fBlock + fBytesWritten, bytes);
+ }
+
+ SkASSERT(SkGPipeReader::kError_Status != fStatus);
+ fBytesWritten += bytes;
+ fTotalWritten += bytes;
+
+ fAtomsWritten += 1;
+} \ No newline at end of file