Ich habe hier ein Programm um Fahrdaten vom Clienten ZUSI abzufragen.
Nun stelle ich diese auch sofort im gleichen Programm grafisch dar.
Kann das Programm mit den TCP-Event irgendwie überfordert werden ?
Oder wo kann man da noch eine Überwachung reinbauen, damit keine Daten verloren gehen ?
Danke.
Gruss
peter
Code: Alles auswählen
Procedure sprite_neu(Sprite, x, y, xx, yy, w.f, dx, dy, h)
w = w * (#PI/180)
r.f = Sqr(Pow(xx,2)+Pow(yy,2))/2
t.f = ATan(xx/yy)
w1.f = w - t : w2.f = w + t : w3.f = w + #PI - t : w4.f = w + #PI + t
TransformSprite3D(Sprite, Cos(w1)*r, Sin(w1)*r, Cos(w2)*r, Sin(w2)*r, Cos(w3)*r, Sin(w3)*r, Cos(w4)*r, Sin(w4)*r)
Start3D()
DisplaySprite3D(Sprite, x-Cos(w)*dy+Sin(w)*dx, y-Sin(w)*dy-Cos(w)*dx, h)
Stop3D()
EndProcedure
Global EventID.l,ClientID.l,rData.l,anz_id.l
Global text.s,wert.l,z.l,offs.l,geschw.l, motor.l
Declare zusi_verbinden()
Declare auswerten()
Declare zeige_daten()
Enumeration
#Window_0
#Button_1
#Button_2
#String_0
#String_1
#String_2
#zeiger1
#anzeiger1
#zeiger2
#anzeiger2
EndEnumeration
Global *sbuffer = AllocateMemory(256)
Global *rbuffer = AllocateMemory(256)
Global *buffer = AllocateMemory(256)
InitSprite()
InitSprite3D()
InitNetwork()
CreateNetworkServer(1, 1435)
OpenWindow(#Window_0, 10, 10, 420,400, "Tcp-Server-Pult", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window_0),5,100,400,200,0,0,0)
StringGadget(#String_0, 10, 10, 120, 20, "")
StringGadget(#String_1, 5, 60, 80, 30, "")
StringGadget(#String_2, 100, 60, 80, 30, "")
CreateSprite(#zeiger1,200,200, #PB_Sprite_Texture)
CreateSprite3D(#zeiger1, #zeiger1)
CreateSprite(#anzeiger1, 200,200, #PB_Sprite_Texture)
CreateSprite3D(#anzeiger1, #anzeiger1)
CreateSprite(#zeiger2,200,200, #PB_Sprite_Texture)
CreateSprite3D(#zeiger2, #zeiger2)
CreateSprite(#anzeiger2, 200,200, #PB_Sprite_Texture)
CreateSprite3D(#anzeiger2, #anzeiger2)
StartDrawing(SpriteOutput(#anzeiger1))
Box(0,0,200,200,RGB(255,0,255))
Circle(100,100,90,RGB(180,180,180))
StopDrawing()
StartDrawing(SpriteOutput(#zeiger1))
Box(0,0,200,200,RGB(255,0,255))
RoundBox(100,100,85,6,3,3,RGB(0,255,0))
StopDrawing()
StartDrawing(SpriteOutput(#anzeiger2))
Box(0,0,200,200,RGB(255,0,255))
Circle(100,100,90,RGB(180,180,180))
StopDrawing()
StartDrawing(SpriteOutput(#zeiger2))
Box(0,0,200,200,RGB(255,0,255))
RoundBox(100,100,85,6,3,3,RGB(255,0,0))
StopDrawing()
TransparentSpriteColor(#zeiger1, RGB(255, 0, 255))
TransparentSpriteColor(#anzeiger1, RGB(255, 0, 255))
TransparentSpriteColor(#zeiger2, RGB(255, 0, 255))
TransparentSpriteColor(#anzeiger2, RGB(255, 0, 255))
Sprite3DQuality(#PB_Sprite3D_BilinearFiltering )
ClearScreen(RGB(140,140,140))
sprite_neu(#anzeiger1,100,100,200,200,0,0,0,255)
sprite_neu(#zeiger1,100,100,200,200,geschw+45,0,-3,255)
sprite_neu(#anzeiger2,300,100,200,200,0,0,0,255)
sprite_neu(#zeiger2,300,100,200,200,motor/10,0,-3,255)
Repeat
EventID = WaitWindowEvent(3)
Select EventID
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
EndSelect
Select NetworkServerEvent()
Case 1
anz_id=anz_id+1
ClientID = EventClient()
If anz_id=1
text+Str(ClientID)+Chr(10)
SetGadgetText(#string_0, text)
zusi_verbinden()
EndIf
Case 2
rdata=ReceiveNetworkData(ClientID, *rbuffer, 255)
auswerten()
EndSelect
FlipBuffers()
Until EventID = #PB_Event_CloseWindow
Procedure zeige_daten()
sprite_neu(#anzeiger1,100,100,200,200,0,0,0,255)
sprite_neu(#zeiger1,100,100,200,200,geschw+45,0,-3,255)
sprite_neu(#anzeiger2,300,100,200,200,0,0,0,255)
sprite_neu(#zeiger2,300,100,200,200,motor/5,0,-3,255)
SetGadgetText(#String_1,Str(geschw))
SetGadgetText(#String_2,Str(motor))
EndProcedure
Procedure auswerten()
For z=6 To rData Step 5
If z > rData
Break
EndIf
wert=PeekB(*rbuffer+z)
If wert=1
PokeL(*buffer + 0, PeekL(*rbuffer+z+1))
geschw=Int(PeekF(*buffer))
ElseIf wert=9
PokeL(*buffer + 0, PeekL(*rbuffer+z+1))
motor=Int(PeekF(*buffer))
EndIf
Next
zeige_daten()
EndProcedure
Procedure zusi_verbinden()
offs = 0
PokeL(*sbuffer + 0, $03) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $02) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
Delay(100)
offs = 0
PokeL(*sbuffer + 0, $06) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $03) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
PokeL(*sbuffer + 7, $0A) : offs + 1
PokeA(*sbuffer + 8, $01) : offs + 1
PokeA(*sbuffer + 9, $09) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
Delay(100)
offs = 0
PokeL(*sbuffer + 0, $04) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $03) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
PokeA(*sbuffer + 7, $00) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
EndProcedure