terminals/Xtreams__ExternalWriteStream.st
author mkobetic
Sun, 15 Jan 2012 02:18:17 +0000
changeset 39 80fdc4602b14
parent 25 02e7c3b6f63c
child 43 b9a077d6ce14
permissions -rw-r--r--
sockets and files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
     1
'From Smalltalk/X, Version:6.2.1 on 14-01-2012 at 09:10:27 PM'                  !
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
     2
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     3
"{ Package: 'stx:goodies/xtreams/terminals' }"
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     4
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     5
"{ NameSpace: Xtreams }"
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     6
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     7
WriteStream subclass:#ExternalWriteStream
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     8
	instanceVariableNames:'contentsSpecies'
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     9
	classVariableNames:''
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    10
	poolDictionaries:''
25
02e7c3b6f63c added XtreamsPool to fix DefaultBufferSize; set proper category names
mkobetic
parents: 9
diff changeset
    11
	category:'Xtreams-Terminals'
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    12
!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    13
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    14
ExternalWriteStream comment:'Used to write to BlockableIOAccessors (e.g sockets or pipes). This is a binary stream (consumes bytes/ByteArrays).
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    15
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    16
{{{
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    17
	[ :in :out |
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    18
		[	out writing write: ''Hello''; close.
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    19
			in reading read: 5
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    20
		] ensure: [ in close. out close ]
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    21
	] valueWithArguments: SocketAccessor openPair
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    22
}}}
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    23
{{{
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    24
	[ :in :out |
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    25
		[	out writing write: ''Hello''; close.
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    26
			in reading read: 5
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    27
		] ensure: [ in close. out close ]
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    28
	] valueWithArguments: OSSystemSupport concreteClass pipeAccessorClass openPair
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    29
}}}
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    30
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    31
Instance Variables
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    32
	contentsSpecies	<Class> species for collections of elements of this stream
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    33
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    34
'
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    35
!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    36
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    37
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    38
!ExternalWriteStream methodsFor:'accessing'!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    39
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    40
write: anInteger from: aSequenceableCollection at: startIndex
39
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    41
        | count wrote |
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    42
        anInteger isZero ifTrue: [^0].
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    43
        count := 0.
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    44
        [count < anInteger] whileTrue:
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    45
                [wrote := destination nextPutBytes: anInteger - count from: aSequenceableCollection startingAt: startIndex + count.
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    46
                wrote isZero ifTrue: [(Incomplete on: aSequenceableCollection count: count at: startIndex) raise].
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    47
                count := count + wrote].
80fdc4602b14 sockets and files
mkobetic
parents: 25
diff changeset
    48
        ^anInteger
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    49
! !
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    50
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    51
!ExternalWriteStream methodsFor:'initialize-release'!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    52
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    53
close
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    54
	destination isActive ifFalse: [^self].
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    55
	destination close
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    56
!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    57
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    58
contentsSpecies
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    59
	^contentsSpecies
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    60
!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    61
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    62
contentsSpecies: aClass
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    63
	contentsSpecies := aClass
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    64
!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    65
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    66
on: anAccessor
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    67
	super on: anAccessor.
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    68
	contentsSpecies := ByteArray
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    69
! !
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    70
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    71
!ExternalWriteStream class methodsFor:'documentation'!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    72
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    73
version_SVN
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    74
    ^ '$Id$'
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    75
! !