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)
- method IT_SET.
- go_carrier TYPE REF TO ZCL_PERSISTENT_TEST2,
- turn TYPE int1.
- go_agent = ZCA_Persistent_TEST2=>agent.
- try.
- go_carrier = go_agent->get_persistent( I_ID = m_id
- I_Zeile = sy-tabix ).
- go_carrier->set_s1( I_S1 = <itab>-s1 ).
- go_carrier->set_s2( I_S2 = <itab>-s2 ).
- go_carrier->set_s3( I_S3 = <itab>-s3 ).
- go_carrier->set_s4( I_S4 = <itab>-s4 ).
- go_carrier->set_s5( I_S5 = <itab>-s5 ).
- go_carrier->set_s6( I_S6 = <itab>-s6 ).
- go_carrier->set_s7( I_S7 = <itab>-s7 ).
- turn = go_carrier->get_player_turn( ).
- turn = 2.
- else.
- turn = 1.
- go_carrier->set_player_turn( I_player_turn = turn ).
- catch cx_os_object_not_found.
- COMMIT WORK.
- 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?