Programmübergreifende Ereignisse mit Persistenten Klassen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Programmübergreifende Ereignisse mit Persistenten Klassen

Postby Georgios492 » Tue Aug 14, 2012 6:29 am

Hallo,

Ich bin gerade dabei ein bisschen mit persistenten Klassen herumzuexperimentieren. Nun will ich ein 4 Gewinnt programmieren dass "mehrspielerfähig" ist.
Person 1 und Person 2 (an verschiedenen PCs) greifen beide auf die persistente Klasse zu in der quasi das Spielfeld für 4 Gewinnt hinterlegt ist. In der Klasse habe ich statische Methoden angelegt mit denen ich im Quellcode einfach nur eine interne Tabelle an die Klasse übergebe und diese dann verarbeitet wird(schreiben,lesen der einzelnen werte und erstellen einer Instanz).

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. method IT_SET.
  2.  
  3.   data:  go_agent TYPE REF TO ZCA_PERSISTENT_TEST2,
  4.          go_carrier TYPE REF TO ZCL_PERSISTENT_TEST2,
  5.          turn TYPE int1.
  6.  
  7.   FIELD-SYMBOLS: <itab> type LINE OF ZMSS_PERS_TYP.
  8.  
  9.  
  10.   go_agent = ZCA_Persistent_TEST2=>agent.
  11.  
  12.   loop at m_ittab ASSIGNING <itab>.
  13.     try.
  14.         go_carrier = go_agent->get_persistent( I_ID = m_id
  15.                                                I_Zeile = sy-tabix ).
  16.         go_carrier->set_s1( I_S1 = <itab>-s1 ).
  17.         go_carrier->set_s2( I_S2 = <itab>-s2 ).
  18.         go_carrier->set_s3( I_S3 = <itab>-s3 ).
  19.         go_carrier->set_s4( I_S4 = <itab>-s4 ).
  20.         go_carrier->set_s5( I_S5 = <itab>-s5 ).
  21.         go_carrier->set_s6( I_S6 = <itab>-s6 ).
  22.         go_carrier->set_s7( I_S7 = <itab>-s7 ).
  23.         if sy-tabix = 1.
  24.           turn = go_carrier->get_player_turn( ).
  25.           if turn = 1 .
  26.             turn = 2.
  27.           else.
  28.             turn = 1.
  29.           endif.
  30.           go_carrier->set_player_turn( I_player_turn = turn ).
  31.         endif.
  32.  
  33.  
  34.       catch cx_os_object_not_found.
  35.         BREAK-POINT.
  36.     endtry.
  37.     COMMIT WORK.
  38.  
  39. RAISE EVENT TURN_CHANGE. "statisches Event
  40.  
GeSHi ©


Nachdem Person 1 einen Spielzug gemacht hat und dieser in die interne Tabelle geschrieben wurde wird die interne Tabelle mithilfe dieser Methode eingelesen.
Außerdem gibt der Wert "Turn" an wer gerade am Zug ist (1=Spieler1 2=Spieler2).
Ist der Wert Turn geändert, also die andere Person am Zug, soll das erkannt werden, alles neu ausgelesen werden und die Buttons um die "Spielsteine" in die Tabelle zu schreiben ausgegraut werden für den, der nicht am Zug ist.

Das hat auch alles, bis auf die automatische Erkennung das nun jemand anderes am Zug ist, geklappt . Meine Lösung zu diesem Zeitpunkt war ein Refresh-Button der einfach die Werte wieder einliest. Jedoch will ich nun eine angenehmere Lösung testen.

Ich will noch ein Ereignis definieren mit dessen Hilfe, dass Programm erkennt, dass die Person X fertig mit seinem Zug ist und die andere Person wieder am Zug ist. Jedoch erkennt nur der Client der Person die den Spielzug durchführt dass ein Event geraised wurde. Der andere Client erkennt dies nicht.
Nun ist meine Frage ist das überhaupt möglich und wenn ja wie?
Georgios492
.
.
 
Posts: 1
Joined: Tue Aug 14, 2012 6:29 am

Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 3 guests