///
import * as encapsulation from "./encapsulation";
import * as CIP from "./cip";
import { TagList } from "../tag-list";
import { TagGroup } from "../tag-group";
import { EventEmitter } from 'events';
/**
* Low Level Ethernet/IP
*
* @class ENIP
* @extends {Socket}
* @fires ENIP#Session Registration Failed
* @fires ENIP#Session Registered
* @fires ENIP#Session Unregistered
* @fires ENIP#SendRRData Received
* @fires ENIP#SendUnitData Received
* @fires ENIP#Unhandled Encapsulated Command Received
*/
export default class ENIP extends EventEmitter {
private socket;
state: ({
scan_rate?: number;
timeout_sp: any;
rpi: any;
scanning: any;
connectedMessaging: any;
controller: any;
fwd_open_serial: number;
tagList?: TagList;
subs?: TagGroup;
unconnectedSendTimeout?: number;
TCP: {
establishing: boolean;
established: boolean;
};
session: {
id: number | null;
establishing: boolean;
established: boolean;
};
connection: {
id: number | null;
establishing: boolean;
established: boolean;
seq_num: number;
};
error: {
code: number | null;
msg: string | null;
};
});
static encapsulation: any;
constructor();
/**
* Returns an Object
* - error code
* - human readable error
*
* @readonly
* @memberof ENIP
*/
get error(): {
code: number | null;
msg: string | null;
};
/**
* Session Establishment In Progress
*
* @readonly
* @memberof ENIP
*/
get establishing(): boolean;
/**
* Session Established Successfully
*
* @readonly
* @memberof ENIP
*/
get established(): boolean;
/**
* Get ENIP Session ID
*
* @readonly
* @memberof ENIP
*/
get session_id(): number | null;
/**
* Various setters for Connection parameters
*
* @memberof ENIP
*/
set establishing_conn(newEstablish: boolean);
set established_conn(newEstablished: boolean);
set id_conn(newID: number | null);
set seq_conn(newSeq: number);
/**
* Various getters for Connection parameters
*
* @memberof ENIP
*/
get establishing_conn(): boolean;
get established_conn(): boolean;
get id_conn(): number | null;
get seq_conn(): number;
connect(IP_ADDR: string, timeoutSP?: number | undefined): Promise;
/**
* Writes Ethernet/IP Data to Socket as an Unconnected Message
* or a Transport Class 1 Datagram
*
* NOTE: Cant Override Socket Write due to net.Socket.write
* implementation. =[. Thus, I am spinning up a new Method to
* handle it. Dont Use Enip.write, use this function instead.
*
* @param {buffer} data - Data Buffer to be Encapsulated
* @param {boolean} [connected=false]
* @param {number} [timeout=10] - Timeout (sec)
* @param {function} [cb=null] - Callback to be Passed to Parent.Write()
* @memberof ENIP
*/
write_cip(data: any, connected?: boolean, timeout?: number, cb?: null): void;
/**
* Sends Unregister Session Command and Destroys Underlying TCP Socket
*
* @override
* @param {Exception} exception - Gets passed to 'error' event handler
* @memberof ENIP
*/
destroy(exception?: Error): this;
_initializeEventHandlers(): void;
/**
* @typedef EncapsulationData
* @type {Object}
* @property {number} commandCode - Ecapsulation Command Code
* @property {string} command - Encapsulation Command String Interpretation
* @property {number} length - Length of Encapsulated Data
* @property {number} session - Session ID
* @property {number} statusCode - Status Code
* @property {string} status - Status Code String Interpretation
* @property {number} options - Options (Typically 0x00)
* @property {Buffer} data - Encapsulated Data Buffer
*/
/*****************************************************************/
/**
* Socket.on('data) Event Handler
*
* @param {Buffer} - Data Received from Socket.on('data', ...)
* @memberof ENIP
*/
_handleDataEvent(data: any): void;
/**
* Socket.on('close',...) Event Handler
*
* @param {Boolean} hadError
* @memberof ENIP
*/
_handleCloseEvent(hadError: any): void;
}
export { CIP, encapsulation };