First commit 11/12/1999

This commit is contained in:
2021-09-12 22:02:01 +02:00
commit 2f76ae2538
139 changed files with 8696 additions and 0 deletions

909
CtrlPPal.cpp Normal file
View File

@ -0,0 +1,909 @@
//---------------------------------------------------------------------------
#include <io.h>
#include <vcl.h>
#pragma hdrstop
#include <registry.hpp>
#include <ShellAPI.hpp>
#include <SysUtils.hpp>
#include <stdlib.h>
#include <math.h>
#include "CtrlPPal.h"
#include "TStatus.h"
#include "CtrlSocket.h"
#include "CtrlCfg.h"
#include "CtrlElemento.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CoolForm"
#pragma resource "*.dfm"
TCtrlPPal *CtrlPPal;
////////////////////////////////////////////////////////////////////////////////
#define MsgDEMO "No olvide que esto es solo una demostraci<63>n.\nPara adquirir la aplicaci<63>n completa:\nPongase en contacto con JD soft.\n\te-mail: jd@infdj.com\n\tTlf: 95561-58-54 Fax: 95561-49-13"
#define DEMOSTRACION
#ifdef DEMOSTRACION
#define CnElementosMAX 3
#else
#define CnElementosMAX 11 // Num. m<>ximo de elementos permitidos
#endif
////////////////////////////////////////////////////////////////////////////////
#define opLOG "Historic.log"
//---------------------------------------------------------------------------
__fastcall TCtrlPPal::TCtrlPPal(TComponent* Owner)
: TForm(Owner)
{
// Remote Control
ClientHook = false;
ServerHook = false;
RemoteStart -> Visible = true;
remoteBack->Visible = false;
remoteLog->Visible = false;
remoteClose->Visible = false;
// Remote Control
siMinimizar = new TStringList(); // Listado de Aplicaciones Especiales
noMinimizar = new TStringList(); // Listado de Aplicaciones Especiales
snMinimizar = new TStringList(); // Listado de Aplicaciones Especiales
noAbrir = new TStringList(); // Listado de Aplicaciones Especiales
LoadProtectedList(); // Carga los listados de Aplicaicones protegidas
nElementosMAX = CnElementosMAX; // N<>mero maximos de elementos
Elementos = new TList(); // Lista de Elementos en funcionamiento
AnySocketActive = 0; // N<> de socket REALMENTE activos
pCache = new TThreadList; // Lista de Hilos de comunicaci<63>n
ChangePositionEnabled = false; // Permiso para mover la posici<63>n de los elementos
CheckAppIntegrity(); // El directorio de instalacion no puede moverse
StartEventRecorder(); // Comenzamos la grabaci<63>n de eventos
TbElementosCFG->Active = true; // Abrimos la tabla de elementos para hacerlos visibles
TbPersonas->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::LoadProtectedList(void)
{
//LoadProtectedList();
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::StartEventRecorder(void)
{
TbHistorial->Active = true; // Tabla de eventos del sistema
try {
// Cargamos todos los eventos anteriores
Memo1->Lines->LoadFromFile( opLOG );
// Si hay demasiados registros
if ( Memo1->Lines->Count > 700 )
{
for ( int i=0; i<100; i++ ) // Eliminamos las 100 <20>ltimas entradas
Memo1->Lines->Delete( 3 );
}
} catch(...) {
Memo1->Lines->Clear(); // En caso de error, las eliminamos todas
}
//Fecha y hora del inicio de sesi<73>n
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Inicio de la sesi<73>n" );
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::iCloseDblClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::iMinClick(TObject *Sender)
{
Application->Minimize();
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::iPosVClick(TObject *Sender)
{
#ifdef DEMOSTRACION
ShowMessage( MsgDEMO );
#endif
if ( ChangePositionEnabled || ( !ChangePositionEnabled && InputBox( "Programa BETA!!!", "Modificar:", "<EFBFBD>Que Modificar?") == "Esto es una beta" ) )
{
Graphics::TBitmap *Picture;
ChangePositionEnabled = !ChangePositionEnabled;
Picture = iPosV->GlyphNormal;
iPosV->GlyphNormal = iPosV->GlyphPress;
iPosV->GlyphPress = Picture;
}
}
//---------------------------------------------------------------------------
/**
Comprueba que el directorio de la aplicaci<63>n es siempre el mismo
(De este modo, la aplicaci<63>n no correra en ning<6E>n directorio distinto, del
que se eligi<67> para instalar)
**/
void __fastcall TCtrlPPal::CheckAppIntegrity(void)
{
TRegistry *Registro;
Registro = new TRegistry;
Registro -> OpenKey( "\\Software\\JDsoft\\CtrlMstr", true );
AnsiString AppPath;
if ( ! Registro->ValueExists( "AppPath" ) )
{
Registro -> WriteString( "AppPath", Application->ExeName );
} else {
AppPath = Registro -> ReadString( "AppPath" );
if ( AppPath != Application->ExeName )
{
ShowMessage( "Copia corrupta o ilegal del programa.\nVuelva a reinstalar el producto." );
nElementosMAX = 0;
}
}
AnsiString DiskSerial;
char VolumeLabel[255], FileSystem[255];
DWord SerialNumber, DW, SysFlags;
GetVolumeInformation( "C:\\", VolumeLabel, 250, &SerialNumber, &DW, &SysFlags, FileSystem, 250);
DiskSerial = AnsiString( ltoa(SerialNumber, FileSystem,10) );
if ( ! Registro->ValueExists( "SerialNum" ) )
{
AnsiString Serial;
Serial = InputBox( "Registrando el Programa:", "N<EFBFBD>mero de Serie:", DiskSerial );
if ( ! Manipula2( DiskSerial, Serial ) )
{
Registro -> WriteString( "SerialNum", Serial );
}
}
if ( Manipula( DiskSerial, Registro -> ReadString( "SerialNum" ) ) )
{
ShowMessage( "Copia corrupta o ilegal del programa.\nVuelva a reinstalar el producto." );
nElementosMAX = 0;
Registro -> DeleteValue( "SerialNum" );
Registro -> DeleteKey( "\\Software\\JDsoft\\CtrlMstr\\SerialNum" );
}
}
//-----------------
bool __fastcall TCtrlPPal::Manipula2(AnsiString Serial, AnsiString Image)
{
char buffer[80];
AnsiString Sol;
double ser = Serial.ToDouble();
if ( ser < 0 ) ser = -1*ser;
Sol = ltoa(sqrtl(ser), buffer, 10);
#ifndef DEMOSTRACION
if ( Image == Sol )
#endif
return false;
return true;
}
//-----------------
bool __fastcall TCtrlPPal::Manipula(AnsiString Serial, AnsiString Image)
{
char buffer[80];
AnsiString Sol;
double ser = Serial.ToDouble();
if ( ser < 0 ) ser = -1*ser;
Sol = ltoa(sqrtl(ser), buffer, 10);
#ifndef DEMOSTRACION
if ( Image == Sol )
#endif
return false;
return true;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::FormDestroy(TObject *Sender)
{
delete siMinimizar;
delete noMinimizar;
delete snMinimizar;
delete noAbrir;
for( int i=0; i < Elementos->Count; i++ )
delete (TElemento *)Elementos->Items[i];
delete Elementos;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::NewElementAt(int X, int Y, int NumEl, AnsiString IP, AnsiString Name )
{
TElemento *Elemento; // Elemento a ser insertado
Elemento = new TElemento(this); // Pedimos memoria para <20>l
Elemento->Left = X; //
Elemento->Top = Y; // FIJAMOS SUS PROPIEDADES
Elemento->AutoSize = true; //
Elemento->Transparent = true; //
Elemento->PopupMenu = mElementoCFG; // Men<65> contextual
Elemento->OnDblClick = ElementoDblClick; //
Elementos->Add( Elemento ); // A<>adimos el elemento a la lista
// Lo hacemos visible
Pizarra->InsertControl( Elemento );
Elemento->SetElemento( NumEl, IP, Name ); // Y comenzamos la comunicaci<63>n
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::PizarraDblClick(TObject *Sender)
{
POINT MousePos;
int X, Y;
// Si lo que quiere es reubicar un nuevo elemento
if ( ChangePositionEnabled )
{
#ifndef DEMOSTRACION
// Anexamos un nuevo elemento a la lista (Si no hemos llegado al l<>mite)
if ( Elementos->Count < nElementosMAX )
{
GetCursorPos(&MousePos);
X = MousePos.x - Left - Pizarra->Left - iElementoV->Picture->Width / 2;
Y = MousePos.y - Top - Pizarra->Top - iElementoV->Picture->Height / 2 ;
try {
// Lo damos de Alta en la tabla
/*
TbElementosCFG -> InsertRecord( ARRAYOFCONST(
( Null, // Numero de Elemento
X, // Posici<63>n X
Y, // Posici<63>n Y
false, "0.0.0.0", "new"+AnsiString(Elementos->Count)
) ) );
*/
AnsiString NameOfElement = "new"+AnsiString(TbElementosCFG->FieldByName("NumElement")->AsInteger);
TbElementosCFG -> Insert();
TbElementosCFG -> Edit();
TbElementosCFG -> FieldByName( "PosX" )-> AsInteger = X;
TbElementosCFG -> FieldByName( "PosY" )-> AsInteger = Y;
TbElementosCFG -> FieldByName( "Activo" )-> AsBoolean = false;
TbElementosCFG -> FieldByName( "IP" )-> AsString = "0.0.0.0";
TbElementosCFG -> FieldByName( "Name" )-> AsString = NameOfElement;
TbElementosCFG -> Post();
NewElementAt( X, Y, TbElementosCFG->FieldByName("NumElement")->AsInteger, "0.0.0.0", NameOfElement );
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Inserci<63>n de nuevos elementos" );
} catch (...) {
ShowMessage( "<EFBFBD><EFBFBD><EFBFBD> SIN MEMORIA ???\nTu G<>indows est<73> petando" );
}
} else
ShowMessage( "Ha superado el m<>ximo n<>mero de elementos\n<EFBFBD><EFBFBD><EFBFBD> IMPOSIBLE A<>ADIR MAS !!!" );
#else
ShowMessage( MsgDEMO );
#endif
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::EliminarElemento(TObject *Sender)
{
if ( ServerHook ) return;
int TraceMeHacker;
TraceMeHacker = Elementos->Count;
#ifndef DEMOSTRACION
if ( ChangePositionEnabled )
{
TElemento *Elemento = (TElemento *)(mElementoCFG->PopupComponent);
// Eliminamos el objeto de la tabla
if ( TbElementosCFG -> Locate( "NumElement", Elemento->NumElemento, TLocateOptions() << loCaseInsensitive ) )
{
TbElementosCFG -> Delete(); // Eliminamos el elemento de la TABLA
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Elemento n<> " + AnsiString( Elemento->NumElemento ) + ", eliminado." );
Pizarra->RemoveControl( Elemento ); // Eliminamos el elemento de la PIZARRA
Elementos->Remove( Elemento ); // Eliminamos el elemento de la MEMORIA
Elementos->Pack();
}
}
#else
ShowMessage( MsgDEMO );
#endif
if ( TraceMeHacker == Elementos->Count )
ShowMessage( "Lo siento pero carece de permisos para modificar los terminales.\n<EFBFBD><EFBFBD>Su intento ha quedado registrado!!" );
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::TbElementosCFGBeforeOpen(TDataSet *DataSet)
{
// Si la tabla no existe, la creamos
if ( access( (TbElementosCFG -> TableName).c_str(), 0 ) != 0 )
{
// Usamos la propiedad FielDefs para definir
// las columnas que contendr<64> la tabla
TbElementosCFG -> FieldDefs -> Clear();
TbElementosCFG -> FieldDefs -> Add("NumElement", ftAutoInc, 0, false );
TbElementosCFG -> FieldDefs -> Add("PosX", ftInteger, 0, false );
TbElementosCFG -> FieldDefs -> Add("PosY", ftInteger, 0, false );
TbElementosCFG -> FieldDefs -> Add("Activo", ftBoolean, 0, false );
TbElementosCFG -> FieldDefs -> Add("IP", ftString, 15, false );
TbElementosCFG -> FieldDefs -> Add("Name", ftString, 8, false );
TbElementosCFG -> FieldDefs -> Add("Comienzo", ftDateTime, 0, false );
TbElementosCFG -> FieldDefs -> Add("Tiempo", ftDateTime, 0, false );
TbElementosCFG -> IndexDefs-> Clear();
TbElementosCFG->IndexDefs->Add("Primary", "NumElement", TIndexOptions() << ixPrimary << ixUnique );
// Creamos la base...
TbElementosCFG -> CreateTable();
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Iniciando sistema por primera vez..." );
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::TbElementosCFGAfterOpen(TDataSet *DataSet)
{
int i; HoraActual = TDateTime::CurrentTime();
// Cargamos todos los elementos
TbElementosCFG -> First(); i = 0;
while ( ! TbElementosCFG->Eof && i < nElementosMAX )
{
/*
if ( TbElementosCFG->FieldByName( "Activo" )->AsBoolean )
{
if ( MessageBox( NULL, AnsiString("El equipo arriba indicado se encuentra \"ocupado\"\n<> Desea dejar libre este equipo ?").c_str(), AnsiString("Equipo " + TbElementosCFG->FieldByName( "NumElement" )->AsString + " <20>Activo?").c_str(), MB_YESNO ) != IDNO )
{
TbElementosCFG->Edit();
TbElementosCFG->FieldByName( "Activo" )->AsBoolean = false;
TbElementosCFG->Post();
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Elemento n<>" + TbElementosCFG->FieldByName( "NumElement" )->AsString + ", estaba activo" );
} else {
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Elemento n<>" + TbElementosCFG->FieldByName( "NumElement" )->AsString + ", SIGUE activo" );
}
}
*/
NewElementAt( TbElementosCFG->FieldByName( "PosX" )->AsInteger,
TbElementosCFG->FieldByName( "PosY" )->AsInteger,
TbElementosCFG->FieldByName( "NumElement" )->AsInteger,
TbElementosCFG->FieldByName( "IP" )->AsString,
TbElementosCFG->FieldByName( "Name" )->AsString
);
TbElementosCFG -> Next(); i++;
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::Estado1Click(TObject *Sender)
{
if ( !ServerHook )
ElementoDblClick(mElementoCFG->PopupComponent);
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::ElementoDblClick(TObject *Sender)
{
// Abrimos el cuadro de dialogo de Status...
if ( ((TElemento *)Sender)->StatusCode != -1 )
{
TStatus *Status;
Status = new TStatus(this);
Status->SetElement( (TElemento *)Sender );
Status -> ShowModal();
delete Status;
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::FormClose(TObject *Sender, TCloseAction &Action)
{
#ifdef DEMOSTRACION
ShowMessage( MsgDEMO );
#endif
clientHook->Close();
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Fin de la sesi<73>n" );
Memo1->Lines->SaveToFile( opLOG );
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::FormDeactivate(TObject *Sender)
{
FreeThreads();
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::Propiedades1Click(TObject *Sender)
{
if ( ServerHook ) return;
if ( ChangePositionEnabled )
{
TElementosCFG *ElementosCFG;
ElementosCFG = new TElementosCFG(this);
ElementosCFG -> ShowModal();
delete ElementosCFG;
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Se han modificado las direcciones IP" );
LoadProtectedList();
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::CerrarWindows1Click(TObject *Sender)
{
TElemento *Elemento = (TElemento *)(mElementoCFG->PopupComponent);
if ( MessageBox( NULL, "<EFBFBD> Realmente quiere cerrar el equipo ?", AnsiString("Equipo n: -- " + AnsiString( Elemento->NumElemento ) + " --" +" Nombre: \""+Elemento->GiveMyName()+"\"" ).c_str(), MB_OKCANCEL ) == IDOK )
{
if ( ServerHook )
{
ServerHookCode = 5660; ServerHookElement = Elemento->NumElemento;
serverHook->Active = true;
} else
Elemento->CerrarWindows();
}
}
//---------------------------------------------------------------------------
TThread * TCtrlPPal::GetThread(void)
{
TList *pList = pCache->LockList();
TThread *NewThread;
if (pList->Count) // cache is not empty
{
NewThread = (TThread *)pList->Items[0];
pList->Delete(0); // remove from cache
}
else
NewThread = (TThread *)new ThreadSocket(true); // create but don<6F>t run
pCache->UnlockList();
return NewThread;
};
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::FreeThreads(void)
{
TList *pList = pCache->LockList();
for (int i = pList->Count - 1; i >= 0; i--)
{
delete pList->Items[i];
pList->Delete(i);
}
pCache->UnlockList();
};
//---------------------------------------------------------------------------
//###########################################################################
//###########################################################################
void __fastcall TCtrlPPal::FormCloseQuery(TObject *Sender, bool &CanClose)
{
// Esperamos a que se cierren los Sockets...
if ( AnySocketActive > 0 )
{
if ( Application->MessageBox("La aplicaci<63>n sigue intentando comunicarse\ncon alg<6C>n terminal.\nPor favor, espere...\n(Cancelar el proceso dejar<61> la aplicaci<63>n\nen un estado Altamente INESTABLE)", AnsiString("<EFBFBD><EFBFBD><EFBFBD> " + AnsiString( AnySocketActive ) + " Alerta(s) !!!").c_str(), MB_OKCANCEL + MB_DEFBUTTON1) != ID_CANCEL )
{
CanClose = false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::ActualizarEstado1Click(TObject *Sender)
{
if ( ServerHook )
{
ServerHookCode = 5661; ServerHookElement = ( (TElemento *)(mElementoCFG->PopupComponent) )->NumElemento;
serverHook -> Active = true;
} else {
( (TElemento *)(mElementoCFG->PopupComponent) ) -> RefreshElement();
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::SinTIEMPO1Click(TObject *Sender)
{
TElemento *Elemento = (TElemento *)(mElementoCFG->PopupComponent);
if ( MessageBox( NULL, "<EFBFBD> Realmente quiere QUITAR EL TIEMPO al equipo ?", AnsiString("Equipo n: -- " + AnsiString( Elemento->NumElemento ) + " --"+" Nombre: \""+Elemento->GiveMyName()+"\"").c_str() , MB_OKCANCEL ) == IDOK )
{
// Actualizamos el historial
TbHistorial -> InsertRecord( ARRAYOFCONST(( Elemento->NumElemento,
(Variant)TDateTime::CurrentDateTime(),
(Variant)Elemento->TiempoRestante(), 0, 998, 0 )) );
TbHistorial -> FlushBuffers();
if ( ServerHook )
{
ServerHookCode = 5668; ServerHookElement = Elemento->NumElemento;
serverHook -> Active = true;
} else
Elemento -> ForcedTimeOut();
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::TbHistorialBeforeOpen(TDataSet *DataSet)
{
// Si la tabla no existe, la creamos
if ( access( (TbHistorial -> TableName).c_str(), 0 ) != 0 )
{
// Usamos la propiedad FielDefs para definir
// las columnas que contendr<64> la tabla
TbHistorial -> FieldDefs -> Clear();
TbHistorial -> FieldDefs -> Add("NumElement", ftInteger, 0, false );
TbHistorial -> FieldDefs -> Add("FComienzo", ftDateTime, 0, false );
TbHistorial -> FieldDefs -> Add("Tiempo", ftTime, 0, false );
TbHistorial -> FieldDefs -> Add("idc", ftInteger, 0, false );
TbHistorial -> FieldDefs -> Add("idtc", ftInteger, 0, false );
TbHistorial -> FieldDefs -> Add("precio", ftCurrency, 0, false );
TbHistorial -> IndexDefs -> Clear();
TbHistorial -> IndexDefs -> Add("Primary", "NumElement;FComienzo", TIndexOptions() << ixPrimary << ixUnique );
// Creamos la base...
TbHistorial -> CreateTable();
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::AsignarHora1Click(TObject *Sender)
{
/*
iAnclada = GetNumElement( Sender );
if ( iAnclada != -1 )
{
Elementos[ iAnclada ]-> EnviarListasAppl();
}
*/
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::RemoteStartClick(TObject *Sender)
{
// Remote Start...
if ( AnySocketActive > 0 )
{
ShowMessage( "Imposible enganche remoto,\nhasta que todos los terminales\nacaben su comunicaci<63>n" );
return;
}
if ( ClientHook )
{
ShowMessage( "Alguien nos tiene enganchados.\nImposible realizar enganche remoto.\n(Pruebe en otro orden)" );
return;
}
RemoteStart -> Visible = false;
ServerHook = true;
remoteBack->Visible = true;
remoteLog->Visible = true;
remoteClose->Visible = true;
remoteLog->Caption= "Inicializando sistema remoto...";
serverHook->Address = InputBox("Conexi<EFBFBD>n Control Remoto", "IP Destino:", "0.0.0.0");
remoteLog->Caption= "Eliminando terminales actuales" ;
Elementos->Pack();
for( int i=0; i < Elementos->Count; i++ )
{
Pizarra->RemoveControl( (TElemento *)Elementos->Items[i] );
delete (TElemento *)Elementos->Items[i];
}
Elementos->Clear();
remoteLog->Caption= "Accediendo a los terminales remotos" ;
ServerHookCode = 5650; ServerHookElement = 5650;
serverHook->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::remoteCloseDblClick(TObject *Sender)
{
if ( ClientHook )
{
ShowMessage( "Alguien nos tiene enganchados.\nImposible des-enganche remoto.\nRiesgo de incomunicaci<63>n parcial" );
return;
}
remoteLog->Caption= "Eliminando terminales actuales" ;
Elementos->Pack();
for( int i=0; i < Elementos->Count; i++ )
{
Pizarra->RemoveControl( (TElemento *)Elementos->Items[i] );
delete (TElemento *)Elementos->Items[i];
}
Elementos->Clear();
ServerHook = false;
remoteLog->Caption= "Cargando Terminales Locales" ;
TbElementosCFGAfterOpen(0);
RemoteStart -> Visible = true;
remoteBack->Visible = false;
remoteLog->Visible = false;
remoteClose->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::clientHookClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Nos han enganchado :: " + Socket->LocalAddress );
ClientHook = true;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::clientHookClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Desenganche " );
ClientHook = false;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::clientHookClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Memo1->Lines->Insert( 0, (Now()).DateTimeString() + " :: Cliente <20> ERROR ! " + AnsiString( ErrorCode ) + "::" + Socket->LocalAddress );
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::SetActiveTimeElement( TElemento *Elemento, TDateTime Tiempo, int L_idc, int L_idtc, Currency L_Precio )
{
if ( ServerHook )
{
ServerHookCode = 5669; ServerHookElement = Elemento->NumElemento;
ServerTiempo = Tiempo; ServerL_idc = L_idc; ServerL_idtc = L_idtc; ServerL_Precio = (double)L_Precio;
serverHook -> Active = true;
} else
Elemento->SetActiveTime( Tiempo, L_idc, L_idtc, L_Precio );
}
//---------------------------------------------------------------------------
TElemento * __fastcall TCtrlPPal::SearchElement( int NumEl )
{
for (int i = Elementos->Count - 1; i >= 0; i--)
{
if ( ((TElemento *)(Elementos->Items[i]))->NumElemento == NumEl )
return (TElemento *)(Elementos->Items[i]);
}
return NULL;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::clientHookAccept(TObject *Sender,
TCustomWinSocket *Socket)
{
int CodOp, dev;
double Tiempo;
TElemento *Elemento;
TWinSocketStream *pStream;
Memo1->Lines->Insert( 0, "Conexi<EFBFBD>n aceptada de " + Socket->RemoteAddress );
try {
pStream = new TWinSocketStream( Socket, 60000 );
try{
// Socket->ReceiveBuf( &CodOp, sizeof(int) );
pStream->WaitForData(30000); pStream->Read( &CodOp, sizeof(int) );
if ( CodOp != 5650 )
{
dev = ( Elemento = SearchElement( CodOp ) ) == NULL ? 1 : 0;
// Socket->SendBuf( &dev, sizeof(int) );
pStream->Write( &dev, sizeof(int) );
if ( dev ) return;
}
ClientHook = true;
// Socket->ReceiveBuf( &CodOp, sizeof(int) );
pStream->WaitForData(30000); pStream->Read( &CodOp, sizeof(int) );
switch( CodOp )
{
// On
case 5669:
int L_idc, L_idtc;
float L_Precio;
/*
Socket->ReceiveBuf( &Tiempo, sizeof(double) );
Socket->ReceiveBuf( &L_idc, sizeof(int) );
Socket->ReceiveBuf( &L_idtc, sizeof(int) );
Socket->ReceiveBuf( &L_Precio, sizeof(float) );
*/
pStream->WaitForData(30000); pStream->Read( &Tiempo, sizeof(double) );
pStream->WaitForData(30000); pStream->Read( &L_idc, sizeof(int) );
pStream->WaitForData(30000); pStream->Read( &L_idtc, sizeof(int) );
pStream->WaitForData(30000); pStream->Read( &L_Precio, sizeof(float) );
SetActiveTimeElement( Elemento, Tiempo, L_idc, L_idtc, (Currency)L_Precio );
break;
// Off
case 5668:
Elemento -> ForcedTimeOut();
break;
// CERRAR WINDOWS
case 5660:
Elemento->CerrarWindows();
break;
// Query TIME (Refresh)
case 5661:
Elemento -> RefreshElement();
Tiempo = Elemento->iTiempoPedido();
// Socket->SendBuf( &Tiempo, sizeof(double) );
pStream->WaitForData(30000); pStream->Read( &Tiempo, sizeof(double) );
Tiempo = Elemento->RTiempoRestante;
// Socket->SendBuf( &Tiempo, sizeof(double) );
pStream->WaitForData(30000); pStream->Read( &Tiempo, sizeof(double) );
break;
// Lista de elementos...
case 5650:
dev = Elementos->Count;
// Socket->SendBuf( &dev, sizeof(int) );
pStream->Write( &dev, sizeof(int) );
for (int i = Elementos->Count - 1; i >= 0; i--)
{
Elemento = (TElemento *)(Elementos->Items[i]);
//void __fastcall TCtrlPPal::NewElementAt(int X, int Y, int NumEl, AnsiString IP, AnsiString Name )
/*
Socket->SendBuf( &(Elemento->Left), sizeof(int) );
Socket->SendBuf( &(Elemento->Top), sizeof(int) );
Socket->SendBuf( &(Elemento->NumElemento), sizeof(int) );
Socket->SendBuf( Elemento->GiveMyIP().c_str(), 70 );
Socket->SendBuf( Elemento->GiveMyName().c_str(), 70 );
Tiempo = Elemento->iTiempoPedido(); Socket->SendBuf( &Tiempo, sizeof(double) );
Tiempo = Elemento->RTiempoRestante; Socket->SendBuf( &Tiempo, sizeof(double) );
*/
pStream->Write( &(Elemento->Left), sizeof(int) );
pStream->Write( &(Elemento->Top), sizeof(int) );
pStream->Write( &(Elemento->NumElemento), sizeof(int) );
pStream->Write( Elemento->GiveMyIP().c_str(), 70 );
pStream->Write( Elemento->GiveMyName().c_str(), 70 );
Tiempo = Elemento->iTiempoPedido(); pStream->Write( &Tiempo, sizeof(double) );
Tiempo = Elemento->RTiempoRestante; pStream->Write( &Tiempo, sizeof(double) );
Elemento -> RefreshElement();
}
break;
default:
Memo1->Lines->Insert( 0, "Mensaje desconocido ::" + Socket->RemoteAddress );
}
}
catch (Exception &E)
{
if (!E.ClassNameIs("EAbort"))
{
Memo1->Lines->Insert( 0, "ERROR en la comunicaci<63>n ::" + Socket->RemoteAddress );
}
}
}
__finally
{
delete pStream;
Socket->Close();
}
Memo1->Lines->Insert( 0, "Tramites Finalizados ::" + Socket->RemoteAddress );
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::serverHookConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
double TiempoPedido, TiempoRestante;
TWinSocketStream *pStream;
int Data;
// create a TWinSocketStream for reading and writing
try {
pStream = new TWinSocketStream( Socket, 60000 );
try
{
pStream->Write( &ServerHookElement, sizeof(int) );
if ( ServerHookCode != 5650 )
{
pStream->WaitForData(30000);
pStream->Read( &Data, sizeof(int) );
if ( Data == 1 )
{
Socket->Close();
return;
}
}
pStream->Write( &ServerHookCode, sizeof(int) );
// Comunicamos seg<65>n c<>digo en ServerHookCode
switch ( ServerHookCode )
{
// On
case 5669:
pStream->Write( &ServerTiempo, sizeof(double) );
pStream->Write( &ServerL_idc, sizeof(int) );
pStream->Write( &ServerL_idtc, sizeof(int) );
pStream->Write( &ServerL_Precio, sizeof(float) );
break;
// Off
case 5668:
// Nada mas
break;
// CERRAR WINDOWS
case 5660:
// Nada mas
break;
// Lista de elementos...
case 5650:
pStream->WaitForData(30000); // Inicio
pStream->Read( &Data, sizeof(int) );
int X,Y, NumEl; char IP[80], Name[80];
for (int i = Data - 1; i >= 0; i--)
{
pStream->WaitForData(30000); pStream->Read( &X, sizeof(int) );
pStream->WaitForData(30000); pStream->Read( &Y, sizeof(int) );
pStream->WaitForData(30000); pStream->Read( &NumEl, sizeof(int) );
pStream->WaitForData(30000); pStream->Read( &IP, 70 );
pStream->WaitForData(30000); pStream->Read( &Name, 70 );
NewElementAt( X, Y, NumEl, IP, Name );
pStream->WaitForData(30000); pStream->Read( &TiempoPedido, sizeof(double) );
pStream->WaitForData(30000); pStream->Read( &TiempoRestante, sizeof(double) );
SearchElement( NumEl ) -> ClientTimeIs( TiempoPedido, TiempoRestante );
}
break;
// Query TIME (Refresh)
case 5661:
pStream->WaitForData(30000); // Inicio
pStream->Read( &TiempoPedido, sizeof(double) );
pStream->WaitForData(30000); // Restante
pStream->Read( &TiempoRestante, sizeof(double) );
SearchElement( ServerHookElement ) -> ClientTimeIs( TiempoPedido, TiempoRestante );
break;
default:
Memo1->Lines->Insert( 0, "Mensaje desconocido ::" + Socket->RemoteAddress );
}
}
catch (Exception &E)
{
if (!E.ClassNameIs("EAbort"))
{
Memo1->Lines->Insert( 0, "ERROR en la comunicaci<63>n ::" + Socket->RemoteAddress );
}
}
}
__finally
{
delete pStream;
Socket->Close();
}
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::ActiveImage3Click(TObject *Sender)
{
clientHook -> Active = !clientHook -> Active;
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::Image1Click(TObject *Sender)
{
char zFileName[80], zParams[80], zDir[80];
ShellExecute(Application->MainForm->Handle, 0, StrPCopy(zFileName, "http:\\\\www.infdj.com"),
StrPCopy(zParams, ""), StrPCopy(zDir, ""), SW_SHOWNOACTIVATE > 32);
}
//---------------------------------------------------------------------------
void __fastcall TCtrlPPal::TbPersonasNewRecord(TDataSet *DataSet)
{
TbPersonas->FieldByName( "FAlta" )->AsDateTime = TDateTime::CurrentDateTime();
TbPersonas->FieldByName( "FModif" )->AsDateTime = TDateTime::CurrentDateTime();
}
//---------------------------------------------------------------------------