1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| procedure TMainForm.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
sCodeRecu, sMessageRecu, addIP, codeUser, codeDep, articleReappro, typeReappro, codeTournee, numCmd, numColis, codeRegroup, typeEclatement : String;
codeValidExpe, chariot, mpl, adr, adrAncien, sCptxcol : string;
idConnect, bonxtrn, typeRejet, ordre, qte, nbscans, rupture, prep, nbErreur : integer;
aLitSocket : TStringList;
tabRecupSocket : TStringDynArray;
sMessageType, sModule, sAction, sRaison, sQuantite : string;
sNumVersion, ligne, lot, cp1, toucheF5, module, sRef : String;
EstUnCodeSSCC : boolean;
type
TMsgType = (MSG_US00, MSG_US99, MSG_CB01, MSG_CR01, MSG_CR02, MSG_CR03, MSG_CR05, MSG_CC02, MSG_CC03, MSG_CC04 , MSG_CC05, MSG_CI01, MSG_CI02, MSG_CI03, MSG_CI05, MSG_CI06, MSG_CI07, MSG_CI08, MSG_CI09, MSG_CI10, MSG_SI02, MSG_SI03, MSG_SI05, MSG_SI06, MSG_SI07, MSG_SI08, MSG_SI09, MSG_CT02, MSG_CT03, MSG_CT04, MSG_CT05, MSG_CT06, MSG_CT07, MSG_CD02, MSG_CD03, MSG_CD04, MSG_CD05, MSG_CD06, MSG_CD07, MSG_CD08, MSG_CD09, MSG_CD10, MSG_CD11, MSG_CD12, MSG_PL02, MSG_SC02, MSG_SC04, MSG_SC05, MSG_SC06, MSG_SC07, MSG_SC08, MSG_SC09, MSG_SC10, MSg_SC11, MSG_SC12);
const
MSG_TYPE : array[TMsgType] of string = ('US00#', 'US99#', 'CB01#', 'CR01#', 'CR02#', 'CR03#', 'CR05#', 'CC02#', 'CC03#', 'CC04#', 'CC05#', 'CI01#', 'CI02#', 'CI03#', 'CI05#', 'CI06#', 'CI07#', 'CI08#', 'CI09#', 'CI10#', 'SI02#', 'SI03#', 'SI05#', 'SI06#', 'SI07#', 'SI08#', 'SI09#', 'CT02#', 'CT03#', 'CT04#','CT05#', 'CT06#', 'CT07#', 'CD02#', 'CD03#', 'CD04#', 'CD05#', 'CD06#', 'CD07#', 'CD08#', 'CD09#', 'CD10#', 'CD11#', 'CD12#', 'PL02#', 'SC02#', 'SC04#', 'SC05#', 'SC06#', 'SC07#', 'SC08#', 'SC09#', 'SC10#', 'SC11#', 'SC12#');
begin
idConnect := -1;
nbErreur := 0;
aLitSocket := TStringList.Create;
EstUnCodeSSCC := False;
sMessageRecu := '';
sCodeRecu := '';
codeUser := '';
codeDep := '';
articleReappro :='';
typeReappro := '';
bonxtrn := -1;
codeTournee := '';
numCmd := '';
numColis := '';
codeRegroup := '';
codeValidExpe := '';
typeEclatement := '';
ligne := '';
lot := '';
rupture := -1;
cp1 := '';
toucheF5 := '';
module := '';
chariot := '';
mpl := '';
prep := -1;
adr := '';
adrAncien := '';
sCptxcol := '';
sMessageType := '';
sModule := '';
sAction := '';
sRef := '';
sRaison := '';
sQuantite := '';
try
// Tant que je ne trouve pas un # indiquant la fin du code barre, je boucle...
While Pos('#', sMessageRecu) = 0 do
begin
sMessageRecu := Socket.ReceiveText;
WriteCodeBarre(maDate + ' : Message reçu : ' + sMessageRecu);
// On vérifie que le message reçu ne soit pas vide
if sMessageRecu = '' then
exit; //On termine la procédure si on a pas de code barre
// Je remplace les CRLF (=Retour Chariot RC sous WinDev) par des ;
sMessageRecu := StringReplace(sMessageRecu, CRLF, ';', [rfReplaceAll]);
//Je sépare ma chaine à chaque ;
ExplodeLazy(sMessageRecu, tabRecupSocket, ';');
{*Ma chaine est de la forme :
Soit sur un Intermec TailleSocket + TailleCodeBarre + CodeBarre
Soit sur un PSION TailleCodeBarre + CodeBarre
Pour ne pas avoir d'erreur je récupère ma TailleCodeBarre qui est toujours en avant dernière position...*}
addIP := Socket.RemoteAddress;
idConnect := Socket.SocketHandle;
idConnexion := idConnect;
// Récupération et stockage de l'identifiant de connexion en DB
oqInsertIdConnexion.Close;
oqInsertIdConnexion.SQL.Clear;
oqInsertIdConnexion.SQL.Add('UPDATE adresseip SET idconnexion = :monIdConnexion WHERE adrip = :addIP');
oqInsertIdConnexion.DeclareAndSet('monIdConnexion', otString, idConnexion);
oqInsertIdConnexion.DeclareAndSet('addIP', otString, addIP);
oqInsertIdConnexion.Execute;
oqInsertIdConnexion.Session.Commit;
// Je vérifie que je reçois bien une valeur pour continuer le traitement
if Length(tabRecupSocket) >= 2 then
begin
sMessageType := tabRecupSocket[Length(tabRecupSocket)-2] + tabRecupSocket[Length(tabRecupSocket)-1];
//Selon le type message reçu je fais le traitement adéquat
case TMsgType(AnsiIndexText(sMessageType, MSG_TYPE)) of
// ----------------------------------------------------------------US : Module utilisateur-------------------------
MSG_US00 : begin // Connexion utilisateur
sCodeRecu := tabRecupSocket[Length(tabRecupSocket)-3];
sNumVersion := tabRecupSocket[Length(tabRecupSocket)-4];
sModule := tabRecupSocket[Length(tabRecupSocket)-2];
sAction := MidStr(tabRecupSocket[Length(tabRecupSocket)-1],1,2);
ControleUser(addIP, sCodeRecu, sNumVersion, sModule, sAction, ServerSocket, oqRechercheNomScan, OracleSession, idConnect, oqAddUser); end;
MSG_US99 : begin // Déconnexion utilisateur
sCodeRecu := tabRecupSocket[Length(tabRecupSocket)-3];
sModule := tabRecupSocket[Length(tabRecupSocket)-2];
sAction := MidStr(tabRecupSocket[Length(tabRecupSocket)-1],1,2);
SortirProgramme(addIP, sCodeRecu, sModule, sAction, ServerSocket, OracleSession, idConnect);
maj_raoxres(sCodeRecu, addIP, sModule, sAction, '', '', '', '', '', 'Déconnexion de l''utilisateur', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'N', 'N', 'N', 'S', OracleSession);
end;
end;
end;
TraceServeur.Lines.Add(Socket.RemoteAddress + ' : ' + sMessageRecu);
end;
except
on E : Exception do LogErreur('Anomalie ServerSocketClientRead - Main') ;
end;
end; |
Partager