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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
| procedure TMainForm.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
sCodeRecu, sMessageRecu, addIP, codeUser, codeDep, articleReappro, typeReappro, codeTournee, numCmd, numColis, codeRegroup : String;
codeValidExpe : string;
idConnect, bonxtrn, typeRejet : integer;
aLitSocket : TStringList;
sNumVersion : String;
begin
idConnect := -1;
aLitSocket := TStringList.Create;
sMessageRecu := '';
sCodeRecu := '';
codeUser := '';
codeDep := '';
articleReappro :='';
typeReappro := '';
bonxtrn := -1;
codeTournee := '';
numCmd := '';
numColis := '';
codeRegroup := '';
codeValidExpe := '';
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 ;
Split(';', sMessageRecu, aLitSocket);
{*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 := RetourneIdConnexion(addIP, oqRechercheAddIP);
// Les tests qui suivent vérifie le mot clé reçu après le message socket pour savoir quelle procédure appeler
if Pos('US00', sMessageRecu) > 0 then
begin
sCodeRecu := aLitSocket[aLitSocket.Count -2];
sNumVersion := aLitSocket[aLitSocket.Count -3];
ControleUser(addIP, sCodeRecu, sNumVersion, ServerSocket, oqRechercheNomScan, OracleSession, idConnect, oqAddUser);
end
else
if Pos('US99', sMessageRecu) > 0 then
begin
sCodeRecu := aLitSocket[aLitSocket.Count -2];
SortirProgramme(addIP, sCodeRecu, ServerSocket, OracleSession, idConnect);
end
else
if Pos('CB', sMessageRecu) > 0 then
begin
//...Et mon code barre qui est toujours en dernière position
sCodeRecu := aLitSocket[aLitSocket.Count -2];
//On vérifie existence du code barre
If sCodeRecu= '' then
begin
exit;
end
else
begin
//Appel de la procédure de recherche de code barre
RechercheCodeBarre(addIP, sCodeRecu, OracleSession, ServerSocket, oqRechercheCB, idConnect);
end;
end
else
if Pos('CR01', sMessageRecu) > 0 then
begin
sCodeRecu := aLitSocket[aLitSocket.Count -2];
//Appel de la procédure de recherche du code déposant (client)
RechercheCodeDep(addIP, sCodeRecu, OracleSession, ServerSocket, oqRechercheDep, idConnect);
end
else
if Pos('CR02', sMessageRecu) > 0 then
begin
codeUser := aLitSocket[aLitSocket.Count -5];
codeDep := aLitSocket[aLitSocket.Count -4];
articleReappro := aLitSocket[aLitSocket.Count -3];
typeReappro := aLitSocket[aLitSocket.Count -2];
sCodeRecu := codeUser +';'+ codeDep +';'+ articleReappro +';' + typeReappro;
//Appel de la procédure de recherche du code article
RechercheDemandeReappro(addIP, sCodeRecu, ServerSocket, oqRechercheArticle, oqRecupLib, oqMajReappro, idConnect);
end
else
if Pos('CR03', sMessageRecu) > 0 then
begin
codeUser := aLitSocket[aLitSocket.Count -3];
bonxtrn := StrToInt(aLitSocket[aLitSocket.Count -2]);
//Appel de la procédure permettant de valider une réappro
ValidReappro(addIP, codeUser, bonxtrn, oqValidT, oqValidD, oqValidE, oqValidU, oqValidV, ServerSocket, idConnect);
end
else
if Pos('CR05', sMessageRecu) > 0 then
begin
codeUser := aLitSocket[aLitSocket.Count -4];
bonxtrn := StrToInt(aLitSocket[aLitSocket.Count -3]);
typeRejet := StrToInt(aLitSocket[aLitSocket.Count -2]);
//Appel de la procédure permettant de faire un arrêt sur une réappro
ArretReappro(addIP, codeUser, bonxtrn, typeRejet, oqArret, ServerSocket, idConnect);
end
else
if Pos('CC02', sMessageRecu) > 0 then
begin
codeUser := aLitSocket[aLitSocket.Count -4];
codeDep := aLitSocket[aLitSocket.Count -3];
codeTournee := aLitSocket[aLitSocket.Count -2];
//Appel de la procédure permettant de rechercher un code tournée
DemandeTournee(addIP, codeUser, codeDep, codeTournee, oqDemandeTour, ServerSocket, idConnect);
end
else
if Pos('CC03', sMessageRecu) > 0 then
begin
codeUser := aLitSocket[aLitSocket.Count -6];
codeDep := aLitSocket[aLitSocket.Count -5];
codeTournee := aLitSocket[aLitSocket.Count -4];
numCmd := aLitSocket[aLitSocket.Count -2];
numColis := aLitSocket[aLitSocket.Count -7];
codeRegroup := aLitSocket[aLitSocket.Count -3];
//Appel de la procédure permettant de valider une commande de chargement
ValidCmdChargement(addIP, codeUser, codeDep, codeTournee, numCmd, codeRegroup, numColis, oqRechercheNomScan, OracleSession, ServerSocket, idConnect);
end
else
if Pos('CC04', sMessageRecu) > 0 then
begin
codeUser := aLitSocket[aLitSocket.Count -5];
codeDep := aLitSocket[aLitSocket.Count -4];
codeTournee := aLitSocket[aLitSocket.Count -3];
codeValidExpe := aLitSocket[aLitSocket.Count -2];
//Appel de la procédure permettant de lancer l'expédition
ValidExpedition(addIP, codeUser, codeDep, codeTournee, codeValidExpe, oqRechercheNomScan, OracleSession, ServerSocket, idConnect);
end
else
if Pos('CC05', sMessageRecu) > 0 then
begin
codeUser := aLitSocket[aLitSocket.Count -6];
codeDep := aLitSocket[aLitSocket.Count -5];
numCmd := aLitSocket[aLitSocket.Count -4];
numColis := aLitSocket[aLitSocket.Count -3];
codeRegroup := aLitSocket[aLitSocket.Count -2];
//Appel de la procédure permettant d'annuler le chargement du colis
AnnulColisChargement(addIP, codeDep, numCmd, codeRegroup, numColis, oqRechercheNomScan, OracleSession, ServerSocket, idConnect);
end;
TraceServeur.Lines.Add(Socket.RemoteAddress + ' : ' + sMessageRecu);
end;
except
on E : Exception do MessageDlg('Anomalie ServerSocketClientRead', mtWarning, [mbOk], 0);
end;
end; |
Partager