s7-server
Version:
TypeScript S7 PLC Server Simulator
119 lines • 3.1 kB
TypeScript
/**
* Connection Manager for S7 Protocol
* Handles client connections, PDU negotiation, and connection state
*/
import { Socket } from 'net';
import { EventEmitter } from 'events';
import { ConnectionState, ConnectionParams } from './iso-tcp';
export interface ConnectionInfo {
id: string;
socket: Socket;
address: string;
port: number;
state: ConnectionState;
params: ConnectionParams;
sequenceNumber: number;
lastActivity: Date;
negotiatedPDU: number;
}
export interface ClientInfo {
id: string;
address: string;
port: number;
connected: boolean;
lastActivity: Date;
negotiatedPDU: number;
}
export declare class ConnectionManager extends EventEmitter {
private connections;
private clientCounter;
private maxClients;
private maxPDUSize;
constructor(maxClients?: number, maxPDUSize?: number);
/**
* Handle new client connection
*/
handleNewConnection(socket: Socket): Promise<string | null>;
/**
* Handle ISO-TCP connection request
*/
handleConnectionRequest(clientId: string, data: Buffer): Promise<boolean>;
/**
* Handle S7 PDU negotiation
*/
handlePDUNegotiation(clientId: string, data: Buffer): Promise<boolean>;
/**
* Handle S7 data request
*/
handleS7Request(clientId: string, data: Buffer): Promise<boolean>;
/**
* Send S7 response to client
*/
sendS7Response(clientId: string, response: Buffer): Promise<boolean>;
/**
* Disconnect client
*/
disconnectClient(clientId: string): Promise<void>;
/**
* Disconnect all clients
*/
disconnectAllClients(): Promise<void>;
/**
* Get client information
*/
getClientInfo(clientId: string): ClientInfo | null;
/**
* Get all connected clients
*/
getAllClients(): ClientInfo[];
/**
* Get connected clients count
*/
getClientsCount(): number;
/**
* Check if client is connected
*/
isClientConnected(clientId: string): boolean;
/**
* Get client's negotiated PDU size
*/
getClientPDUSize(clientId: string): number;
/**
* Setup socket event handlers
*/
private setupSocketHandlers;
/**
* Handle incoming PDU
*/
private handlePDU;
/**
* Handle client disconnect
*/
private handleClientDisconnect;
/**
* Extract sequence number from address (simplified)
*/
private extractSequenceFromAddress;
/**
* Cleanup inactive connections
*/
cleanupInactiveConnections(timeoutMs?: number): void;
/**
* Update server configuration
*/
updateConfig(maxClients: number, maxPDUSize: number): void;
/**
* Get connection by client ID
*/
getConnection(clientId: string): ConnectionInfo | undefined;
/**
* Get connection statistics
*/
getStatistics(): {
totalConnections: number;
connectedClients: number;
maxClients: number;
maxPDUSize: number;
};
}
//# sourceMappingURL=connection-manager.d.ts.map