import IDataOutput from "../utils/IDataOutput";
import IDataInput from "../utils/IDataInput";
import Endian from "../utils/Endian";
import ByteArray from "../utils/ByteArray";
import ObjectEncoding from "./ObjectEncoding";
import EventDispatcher from "../events/EventDispatcher";
declare namespace openfl.net {
/**
* The Socket class enables code to establish Transport Control Protocol
* (TCP) socket connections for sending and receiving binary data.
* The Socket class is useful for working with servers that use binary
* protocols.
*
* To use the methods of the Socket class, first use the constructor, `new
* Socket`, to create a Socket object.
*
* A socket transmits and receives data asynchronously.
*
* _OpenFL target support:_ This feature is supported on all desktop operating
* systems, on iOS, and on Android. On the html5 target, it uses web sockets
* instead of raw unix-style sockets.
*
* On some operating systems, flush() is called automatically between
* execution frames, but on other operating systems, such as Windows, the
* data is never sent unless you call `flush()` explicitly. To ensure your
* application behaves reliably across all operating systems, it is a good
* practice to call the `flush()` method after writing each message (or
* related group of data) to the socket.
*
* In Adobe AIR, Socket objects are also created when a listening
* ServerSocket receives a connection from an external process. The Socket
* representing the connection is dispatched in a ServerSocketConnectEvent.
* Your application is responsible for maintaining a reference to this Socket
* object. If you don't, the Socket object is eligible for garbage collection
* and may be destroyed by the runtime without warning.
*
* SWF content running in the local-with-filesystem security sandbox cannot
* use sockets.
*
* _Socket policy files_ on the target host specify the hosts from which SWF
* files can make socket connections, and the ports to which those
* connections can be made. The security requirements with regard to socket
* policy files have become more stringent in the last several releases of
* Flash Player. In all versions of Flash Player, Adobe recommends the use of
* a socket policy file; in some circumstances, a socket policy file is
* required. Therefore, if you are using Socket objects, make sure that the
* target host provides a socket policy file if necessary.
*
* The following list summarizes the requirements for socket policy files in
* different versions of Flash Player:
*
* * In Flash Player 9.0.124.0 and later, a socket policy file is required
* for any socket connection. That is, a socket policy file on the target
* host is required no matter what port you are connecting to, and is
* required even if you are connecting to a port on the same host that is
* serving the SWF file.
* * In Flash Player versions 9.0.115.0 and earlier, if you want to connect
* to a port number below 1024, or if you want to connect to a host other
* than the one serving the SWF file, a socket policy file on the target host
* is required.
* * In Flash Player 9.0.115.0, even if a socket policy file isn't required,
* a warning is displayed when using the Flash Debug Player if the target
* host doesn't serve a socket policy file.
* * In AIR, a socket policy file is not required for content running in the
* application security sandbox. Socket policy files are required for any
* socket connection established by content running outside the AIR
* application security sandbox.
*
* For more information related to security, see the Flash Player Developer
* Center Topic: [Security](http://www.adobe.com/go/devnet_security_en).s
*
* @event close Dispatched when the server closes the socket
* connection.
* The `close` event is dispatched only when the server
* closes the connection; it is not dispatched when you
* call the `Socket.close()` method.
* @event connect Dispatched when a network connection has been
* established.
* @event ioError Dispatched when an input/output error occurs that
* causes a send or load operation to fail.
* @event securityError Dispatched if a call to `Socket.connect()` attempts
* to connect to a server prohibited by the caller's
* security sandbox or to a port lower than 1024 and no
* socket policy file exists to permit such a
* connection.
* **Note:** In an AIR application, content running in
* the application security sandbox is permitted to
* connect to any server and port number without a
* socket policy file.
* @event socketData Dispatched when a socket has received data.
* The data received by the socket remains in the socket
* until it is read. You do not have to read all the
* available data during the handler for this event.
*
* Events of type `socketData` do not use the
* `ProgressEvent.bytesTotal` property.
*
*/
export class Socket extends EventDispatcher implements IDataOutput, IDataInput {
/**
* Creates a new Socket object. If no parameters are specified, an
* initially disconnected socket is created. If parameters are specified,
* a connection is attempted to the specified host and port.
* **Note:** It is strongly advised to use the constructor form **without
* parameters**, then add any event listeners, then call the `connect`
* method with `host` and `port` parameters. This sequence guarantees
* that all event listeners will work properly.
*
* @param host A fully qualified DNS domain name or an IP address. IPv4
* addresses are specified in dot-decimal notation, such as
* _192.0.2.0_. In Flash Player 9.0.115.0 and AIR 1.0 and
* later, you can specify IPv6 addresses using
* hexadecimal-colon notation, such as
* _2001:db8:ccc3:ffff:0:444d:555e:666f_. You can also
* specify `null` to connect to the host server on which the
* SWF file resides. If the SWF file issuing this call is
* running in a web browser, `host` must be in the domain
* from which the SWF file originated.
* @param port The TCP port number on the target host used to establish a
* connection. In Flash Player 9.0.124.0 and later, the
* target host must serve a socket policy file specifying
* that socket connections are permitted from the host
* serving the SWF file to the specified port. In earlier
* versions of Flash Player, a socket policy file is required
* only if you want to connect to a port number below 1024,
* or if you want to connect to a host other than the one
* serving the SWF file.
* @throws SecurityError This error occurs in SWF content for the
* following reasons:
* * Local-with-filesystem files cannot communicate
* with the Internet. You can work around this
* problem by reclassifying this SWF file as
* local-with-networking or trusted. This
* limitation is not set for AIR application
* content in the application security sandbox.
* * You cannot specify a socket port higher than
* 65535.
* @event connect Dispatched when a network connection has been
* established.
* @event ioError Dispatched when an input/output error occurs that
* causes the connection to fail.
* @event securityError Dispatched if a call to `Socket.connect()`
* attempts to connect either to a server that
* doesn't serve a socket policy file, or to a
* server whose policy file doesn't grant the
* calling host access to the specified port. For
* more information on policy files, see "Website
* controls (policy files)" in the _OpenFL
* Developer's Guide_ and the Flash Player Developer
* Center Topic: [Security](http://www.adobe.com/go/devnet_security_en).
*
*/
constructor(host?: string, port?: number);
/**
* The number of bytes of data available for reading in the input buffer.
*
* Your code must access `bytesAvailable` to ensure that sufficient data
* is available before trying to read it with one of the `read` methods.
*
*/
get bytesAvailable(): number;
/**
* Indicates the number of bytes remaining in the write buffer.
*
* Use this property in combination with with the OutputProgressEvent. An
* OutputProgressEvent is thrown whenever data is written from the write buffer to
* the network. In the event handler, you can check bytesPending to see how much data
* is still left in the buffer waiting to be written. When bytesPending returns 0, it
* means that all the data has been transferred from the write buffer to the network,
* and it is safe to do things like remove event handlers, null out socket
* references, start the next upload in a queue, etc.
*
*/
get bytesPending(): number;
/**
* Indicates whether this Socket object is currently connected. A call to
* this property returns a value of `true` if the socket is currently
* connected, or `false` otherwise.
*
*/
get connected(): boolean;
/**
* Indicates the byte order for the data. Possible values are constants
* from the openfl.utils.Endian class, `Endian.BIG_ENDIAN` or
* `Endian.LITTLE_ENDIAN`.
*
* @default Endian.BIG_ENDIAN
*
*/
get endian(): Endian;
set endian(value: Endian)
/**
* Controls the version of AMF used when writing or reading an object.
*
*/
get objectEncoding(): ObjectEncoding;
set objectEncoding(value: ObjectEncoding)
/**
* Indicates the number of milliseconds to wait for a connection.
* If the connection doesn't succeed within the specified time, the
* connection fails. The default value is 20,000 (twenty seconds).
*
*/
timeout: number;
/**
* Closes the socket. You cannot read or write any data after the
* `close()` method has been called.
* The `close` event is dispatched only when the server closes the
* connection; it is not dispatched when you call the `close()` method.
*
* You can reuse the Socket object by calling the `connect()` method on
* it again.
*
* @throws IOError The socket could not be closed, or the socket was not
* open.
*
*/
close(): void;
/**
* Connects the socket to the specified host and port.
* If the connection fails immediately, either an event is dispatched or
* an exception is thrown: an error event is dispatched if a host was
* specified, and an exception is thrown if no host was specified.
* Otherwise, the status of the connection is reported by an event. If
* the socket is already connected, the existing connection is closed
* first.
*
* @param host The name or IP address of the host to connect to. If no
* host is specified, the host that is contacted is the host
* where the calling file resides. If you do not specify a
* host, use an event listener to determine whether the
* connection was successful.
* @param port The port number to connect to.
* @throws IOError No host was specified and the connection failed.
* @throws SecurityError This error occurs in SWF content for the
* following reasons:
* * Local untrusted SWF files may not communicate
* with the Internet. You can work around this
* limitation by reclassifying the file as
* local-with-networking or as trusted.
* * You cannot specify a socket port higher than
* 65535.
* * In the HTML page that contains the SWF
* content, the `allowNetworking` parameter of the
* `object` and `embed` tags is set to `"none"`.
* @event connect Dispatched when a network connection has been
* established.
* @event ioError Dispatched if a host is specified and an
* input/output error occurs that causes the
* connection to fail.
* @event securityError Dispatched if a call to `Socket.connect()`
* attempts to connect either to a server that
* doesn't serve a socket policy file, or to a
* server whose policy file doesn't grant the
* calling host access to the specified port. For
* more information on policy files, see "Website
* controls (policy files)" in the _OpenFL
* Developer's Guide_ and the Flash Player Developer
* Center Topic: [Security](http://www.adobe.com/go/devnet_security_en).
*
*/
connect(host: string, port: number): void;
/**
* Flushes any accumulated data in the socket's output buffer.
* On some operating systems, flush() is called automatically between
* execution frames, but on other operating systems, such as Windows, the
* data is never sent unless you call `flush()` explicitly. To ensure
* your application behaves reliably across all operating systems, it is
* a good practice to call the `flush()` method after writing each
* message (or related group of data) to the socket.
*
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
flush(): void;
/**
* Reads a Boolean value from the socket. After reading a single byte,
* the method returns `true` if the byte is nonzero, and `false`
* otherwise.
*
* @return A value of `true` if the byte read is nonzero, otherwise
* `false`.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readBoolean(): boolean;
/**
* Reads a signed byte from the socket.
*
* @return A value from -128 to 127.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readByte(): number;
/**
* Reads the number of data bytes specified by the length parameter from
* the socket. The bytes are read into the specified byte array, starting
* at the position indicated by `offset`.
*
* @param bytes The ByteArray object to read data into.
* @param offset The offset at which data reading should begin in the
* byte array.
* @param length The number of bytes to read. The default value of 0
* causes all available data to be read.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readBytes(bytes: ByteArray, offset?: number, length?: number): void;
/**
* Reads an IEEE 754 double-precision floating-point number from the
* socket.
*
* @return An IEEE 754 double-precision floating-point number.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readDouble(): number;
/**
* Reads an IEEE 754 single-precision floating-point number from the
* socket.
*
* @return An IEEE 754 single-precision floating-point number.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readFloat(): number;
/**
* Reads a signed 32-bit integer from the socket.
*
* @return A value from -2147483648 to 2147483647.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readInt(): number;
/**
* Reads a multibyte string from the byte stream, using the specified
* character set.
*
* @param length The number of bytes from the byte stream to read.
* @param charSet The string denoting the character set to use to
* interpret the bytes. Possible character set strings
* include `"shift_jis"`, `"CN-GB"`, and `"iso-8859-1"`.
* For a complete list, see Supported Character
* Sets.
* **Note:** If the value for the `charSet` parameter is
* not recognized by the current system, then the
* application uses the system's default code page as the
* character set. For example, a value for the `charSet`
* parameter, as in `myTest.readMultiByte(22,
* "iso-8859-01")` that uses `01` instead of `1` might
* work on your development machine, but not on another
* machine. On the other machine, the application will use
* the system's default code page.
* @return A UTF-8 encoded string.
* @throws EOFError There is insufficient data available to read.
*
*/
readMultiByte(length: number, charSet: string): string;
/**
* Reads an object from the socket, encoded in AMF serialized format.
*
* @return The deserialized object
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readObject(): any;
/**
* Reads a signed 16-bit integer from the socket.
*
* @return A value from -32768 to 32767.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readShort(): number;
/**
* Reads an unsigned byte from the socket.
*
* @return A value from 0 to 255.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readUnsignedByte(): number;
/**
* Reads an unsigned 32-bit integer from the socket.
*
* @return A value from 0 to 4294967295.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readUnsignedInt(): number;
/**
* Reads an unsigned 16-bit integer from the socket.
*
* @return A value from 0 to 65535.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readUnsignedShort(): number;
/**
* Reads a UTF-8 string from the socket. The string is assumed to be
* prefixed with an unsigned short integer that indicates the length in
* bytes.
*
* @return A UTF-8 string.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readUTF(): string;
/**
* Reads the number of UTF-8 data bytes specified by the `length`
* parameter from the socket, and returns a string.
*
* @param length The number of bytes to read.
* @return A UTF-8 string.
* @throws EOFError There is insufficient data available to read.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
readUTFBytes(length: number): string;
/**
* Writes a Boolean value to the socket. This method writes a single
* byte, with either a value of 1 (`true`) or 0 (`false`).
*
* @param value The value to write to the socket: 1 (`true`) or 0
* (`false`).
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeBoolean(value: boolean): void;
/**
* Writes a byte to the socket.
*
* @param value The value to write to the socket. The low 8 bits of the
* value are used; the high 24 bits are ignored.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeByte(value: number): void;
/**
* Writes a sequence of bytes from the specified byte array. The write
* operation starts at the position specified by `offset`.
* If you omit the `length` parameter the default length of 0 causes the
* method to write the entire buffer starting at `offset`.
*
* If you also omit the `offset` parameter, the entire buffer is written.
*
* @param bytes The ByteArray object to write data from.
* @param offset The zero-based offset into the `bytes` ByteArray object
* at which data writing should begin.
* @param length The number of bytes to write. The default value of 0
* causes the entire buffer to be written, starting at the
* value specified by the `offset` parameter.
* @throws IOError An I/O error occurred on the socket, or the socket
* is not open.
* @throws RangeError If `offset` is greater than the length of the
* ByteArray specified in `bytes` or if the amount of
* data specified to be written by `offset` plus
* `length` exceeds the data available.
*
*/
writeBytes(bytes: ByteArray, offset?: number, length?: number): void;
/**
* Writes an IEEE 754 double-precision floating-point number to the
* socket.
*
* @param value The value to write to the socket.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeDouble(value: number): void;
/**
* Writes an IEEE 754 single-precision floating-point number to the
* socket.
*
* @param value The value to write to the socket.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeFloat(value: number): void;
/**
* Writes a 32-bit signed integer to the socket.
*
* @param value The value to write to the socket.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeInt(value: number): void;
/**
* Writes a multibyte string from the byte stream, using the specified
* character set.
*
* @param value The string value to be written.
* @param charSet The string denoting the character set to use to
* interpret the bytes. Possible character set strings
* include `"shift_jis"`, `"CN-GB"`, and `"iso-8859-1"`.
* For a complete list, see Supported Character
* Sets.
*
*/
writeMultiByte(value: string, charSet: string): void;
/**
* Write an object to the socket in AMF serialized format.
*
* @param object The object to be serialized.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeObject(object: any): void;
/**
* Writes a 16-bit integer to the socket. The bytes written are as
* follows:
*
* ```
* (v >> 8) & 0xff v & 0xff
* ```
*
* The low 16 bits of the parameter are used; the high 16 bits are
* ignored.
*
* @param value The value to write to the socket.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeShort(value: number): void;
/**
* Writes a 32-bit unsigned integer to the socket.
*
* @param value The value to write to the socket.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeUnsignedInt(value: number): void;
/**
* Writes the following data to the socket: a 16-bit unsigned integer,
* which indicates the length of the specified UTF-8 string in bytes,
* followed by the string itself.
* Before writing the string, the method calculates the number of bytes
* that are needed to represent all characters of the string.
*
* @param value The string to write to the socket.
* @throws IOError An I/O error occurred on the socket, or the socket
* is not open.
* @throws RangeError The length is larger than 65535.
*
*/
writeUTF(value: string): void;
/**
* Writes a UTF-8 string to the socket.
*
* @param value The string to write to the socket.
* @throws IOError An I/O error occurred on the socket, or the socket is
* not open.
*
*/
writeUTFBytes(value: string): void;
}
}
export default openfl.net.Socket;