Re: Base Sqlite et Utilisation de PostGreSQL
Publié : sam. 04/août/2018 14:21
Tu peux le faire via postfre ou sqlite c'est toi qui décide.Tu veux dire que je n'ai pas besoin de PostGreSQL?
Dans les deux cas tu auras besoin d'un logiciel serveur et d'un logiciel client
Rien à voir, le serveur sera la parti qui à accès à la base SQL, le client sera ton logiciel actuel, sauf qu'au lieu d'accéder directement à la base SQL, il devra passer par le serveur pour ses requetesLes 2 logiciels seront ils identiques ou différents?
Ca évite d'avoir 2 PC qui font une requête en même temps, ce qui aurais pour effet de faire "kaboom" ta base SQL et d'être sécurisé.
Je t'ai fait un petit exemple, à savoir que dans ton cas, 2 client c'est pas beaucoup donc un serveur monothread fera le boulot et sera plus simple à coder, mais si tu souhaite faire le même genre
de code client/serveur, avec plusieurs connections en même temps, il faudra multithread ton serveur.
Serveur :
Code : Tout sélectionner
EnableExplicit
InitNetwork()
;UseSQLiteDatabase()
Structure client
ID.I
*Data
DataReceive.i
DataSize.i
EndStructure
Enumeration
#PRT_bla
#PRT_blabla
EndEnumeration
Global NewList client.client(), *networkbuffer = AllocateMemory(65536)
Declare RequestEvent(*ClientData)
If CreateNetworkServer(0,5555)
;Ouvre ta base SQL ici
Repeat
Select NetworkServerEvent(0)
Case #PB_NetworkEvent_None
Delay(10)
Case #PB_NetworkEvent_Data
ForEach client()
If client()\ID = EventClient()
If client()\DataSize
client()\DataReceive + ReceiveNetworkData(client()\ID,client()\Data,client()\DataSize-client()\DataReceive)
Else
ReceiveNetworkData(client()\ID,*networkbuffer,SizeOf(long))
client()\Data = AllocateMemory(PeekL(*networkbuffer))
client()\DataSize = PeekL(*networkbuffer)
client()\DataReceive = ReceiveNetworkData(client()\ID,client()\Data,client()\DataSize)
EndIf
Break
EndIf
Next
If client()\DataReceive = client()\DataSize
client()\DataReceive = 0
client()\DataSize = 0
RequestEvent(@client())
EndIf
Case #PB_NetworkEvent_Connect
AddElement(client())
client()\ID = EventClient()
Case #PB_NetworkEvent_Disconnect
ForEach client()
If client()\ID = EventClient()
If client()\DataSize
FreeMemory(client()\Data)
EndIf
DeleteElement(client())
Break
EndIf
Next
EndSelect
ForEver
EndIf
Procedure RequestEvent(*ClientData.client)
Protected size
Select PeekA(*ClientData\Data)
Case #PRT_bla
;En vrais ça devrais correspontre à tes requetes
Debug "j'ai recu un bla"
Case #PRT_blabla
size = SizeOf(ascii)+Len("bla bla blaaaaa")*2+2
Debug "j'ai recu "+PeekS(*ClientData\Data+SizeOf(ascii))
PokeL(*networkbuffer,size)
PokeA(*networkbuffer+SizeOf(long),#PRT_blabla)
PokeS(*networkbuffer+SizeOf(long)+SizeOf(ascii),"bla bla blaaaaa")
SendNetworkData(*ClientData\ID,*networkbuffer,size+SizeOf(long))
Delay(10)
EndSelect
FreeMemory(*ClientData\Data)
EndProcedure
Code : Tout sélectionner
EnableExplicit
InitNetwork()
Enumeration
#PRT_bla
#PRT_blabla
EndEnumeration
Global *networkbuffer = AllocateMemory(65536), connection
connection = OpenNetworkConnection("127.0.0.1",5555)
If Not connection
MessageRequester("connection","impossible de se connecter")
End
EndIf
Declare SendStr()
Declare SendBla()
Declare Close()
Declare Network()
If OpenWindow(0,0,0,200,300,"bla",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
StringGadget(0,10,10,100,20,"")
ButtonGadget(1,10,40,80,20,"envoyer la str")
ButtonGadget(2,110,40,80,20,"envoyer un bla")
BindEvent(#PB_Event_CloseWindow,@Close())
BindGadgetEvent(1,@SendStr())
BindGadgetEvent(2,@SendBla())
EndIf
Repeat : WaitWindowEvent(10) : Network() : ForEver
Procedure Close()
End
EndProcedure
Procedure SendBla()
PokeL(*networkbuffer,SizeOf(ascii))
PokeA(*networkbuffer+SizeOf(long),#PRT_bla)
SendNetworkData(connection,*networkbuffer,SizeOf(long)+SizeOf(ascii))
EndProcedure
Procedure SendStr()
Protected size
size = SizeOf(ascii)+Len(GetGadgetText(0))*2+2
PokeL(*networkbuffer,size)
PokeA(*networkbuffer+SizeOf(long),SizeOf(ascii))
PokeS(*networkbuffer+SizeOf(long)+SizeOf(ascii),GetGadgetText(0))
SendNetworkData(connection,*networkbuffer,size+SizeOf(long))
Delay(10)
EndProcedure
Procedure Network()
Protected size, receivedsize
If NetworkClientEvent(connection) = #PB_NetworkEvent_Data
ReceiveNetworkData(connection,*networkbuffer,SizeOf(long))
size = PeekL(*networkbuffer)
Repeat
receivedsize + ReceiveNetworkData(connection,*networkbuffer+receivedsize,size-receivedsize)
;!!!!!!!!!!!!!!!!!!! C'est un exemple donc je suis un flémard, mais la feinte c'est qu'ici receivenetworkdata peut renvoyer -1 si le réseau est occupé !!!
;Il faut gérer cet cas pour ne pas rentrer dans une boucle infinit !!!!!!!
Until size = receivedsize
Select PeekA(*networkbuffer)
Case #PRT_blabla
Debug PeekS(*networkbuffer+SizeOf(ascii))
EndSelect
EndIf
EndProcedure