Entwickler-Ecke

Freeware Projekte - TippKlickCS - Tipp-Manager im LAN (nicht nur) für die WM2010


Narses - Fr 30.05.08 00:11
Titel: TippKlickCS - Tipp-Manager im LAN (nicht nur) für die WM2010
TippKlickCS - LAN-Tippspiel-Verwaltung (nicht nur) für die WM2010

Was ist das?
Client-Server-System, um ein Tippspiel, z.B. für die Fußball-Weltmeisterschaft 2010, im Netzwerk zu verwalten.


Installation - Server
Das Serverprogramm auf einen PC im Netzwerk kopieren und starten, beliebiges Verzeichnis möglich. Wenn die Anwendung ihre Daten im Programmverzeichnis ablegen soll, sind Admin-Rechte (wg. Schreibzugriffen im Programmverzeichnis) und eine gleichnamige, leere INI-Datei nötig (ist bereits im Verzeichnis enthalten). Ansonsten wird ein entsprechendes Verzeichnis im Anwendungsdatenpfad des Benutzerprofils angelegt und dort gespeichert.

Das Ersteinstiegskennwort für den Server ist leer, einfach auf den Login-Button klicken.

Der Server verwendet die Ports 4711/TCP+UDP und 4712/UDP für die Kommunikation mit den Clients.


Installation - Client
Das Clientprogramm in eine Netzwerkfreigabe oder lokal auf die PCs kopieren, beliebiges Verzeichnis möglich. Wenn die Anwendung ihre Daten im Programmverzeichnis ablegen soll, sind Admin-Rechte (wg. Schreibzugriffen im Programmverzeichnis) und eine gleichnamige, leere INI-Datei nötig (ist bereits im Verzeichnis enthalten). Ansonsten wird ein entsprechendes Verzeichnis im Anwendungsdatenpfad des Benutzerprofils angelegt und dort gespeichert.

Beim Start versucht der Client automatisch per UDP-Broadcast einen TippKlick-Server im Netzwerk zu finden. Das wird jedesmal beim Starten gemacht, bis ein Server geantwortet hat oder manuell ein Hostname eingetragen wurde. Wenn der Server also vor dem Client gestartet wurde (und im Netz erreichbar ist), dann sollten sich die Clients nach Eingabe eines Benutzernamens/Kennwort am Server anmelden können. In der Standard-Konfiguration sind die Benutzerkonten vom Administrator anzulegen. Der Server kann aber auch so konfiguriert werden, dass unbekannte Benutzer automatisch angelegt werden (allerdings nur, wenn das übermittelte Kennwort dem Ersteinstiegskennwort entspricht, was im Server festgelegt wird!).


Deinstallation
Einfach die Programme/Verzeichnisse löschen, es werden keine DLLs verteilt oder Registry-Einträge erstellt/verteilt (ggfs. befindet sich ein Verzeichnis im Anwendungsdatenpfad des Benutzers).


Administration
Wenn ein Spiel stattgefunden hat, muss der Administrator das Ergebnis eintragen. Dazu im Abschnitt "Ereignis-/Spiel-Definitionen" das betreffende Spiel auswählen und mit dem Button "Spielergebnis eingeben und Tipps auswerten" das Ergebnis erfassen. Das geht nur, wenn keine Clients angemeldet sind.


Worum geht´s mir bei diesem Test?
Ich möche euch bitten, das Programm einfach mal unter dem Gesichtspunkt "intuitive Benutzbarkeit" zu testen, besonders natürlich den Client, den Server wird ja wohl in der Regel ein Poweruser bedienen. Deshalb erzähle ich hier auch nicht mehr viel, probiert´s einfach mal aus. ;) Selbstverständlich könnt ihr das Ding gerne auch für eigene Zwecke einsetzen.

Hintergrund
"Oh nein, nicht noch ein Tippspiel-Fummel-Dingsbums..." :roll: Und das auch noch von mir, als "Fußballhasser"... :lol: Nunja, es gab halt ein paar Gründe, die dazu geführt haben, dass ich ausgerechnet so ein Progrämmchen für den Einsatz auf meinem Job geschrieben habe, wollen wir das nicht weiter auswalzen. ;) Einen Design-Preis werde ich dafür wohl nicht kriegen :P aber darum ging´s mir auch nicht. Es sollte halt kein großer Aufwand werden (Entwicklungszeit: ca. 16 Stunden meiner kostbaren Freizeit :lol:).

Ich bitte um konstruktive Kritik! :D

cu
Narses

Update auf v1.0.0.2:Update auf v1.0.0.3:Update auf v1.0.0.3/Client, 1.0.0.4/Server:Update auf v1.0.0.5:Update auf v1.0.0.6:Update auf v1.0.0.7:Update auf v1.0.0.8:Update auf v1.0.0.9:Update auf v1.0.0.10:Update auf v1.0.0.12:Update auf v1.0.1.0 -final-:


littleDave - Fr 30.05.08 01:31

Also ich habs mir jetzt gerade nur ganz kurz angeschaut, da ich eigentlich schon ins Bett müsste ;-)

Dabei sind mir 2 Dinge aufgefallen:

Nun mal was zur Oberfläche:

Im großen und ganzen find ich das Programm sehr gut, übersichtlich und nett gemacht. Aber gerade die kurze Entwicklungszeit finde ich beendruckend, da das Protokoll sehr solide und ausgereift wirkt.

Ich hoffe, dass ich konstruktive Kritik abgegeben habe ;-)

Grüße
Dave


Narses - Fr 30.05.08 01:55

Moin!

user profile iconlittleDave hat folgendes geschrieben:
Ich hoffe, dass ich konstruktive Kritik abgegeben habe ;-)
Ja, danke. ;)

user profile iconlittleDave hat folgendes geschrieben:
Im Server ist das RichEdit nicht ReadOnly (das ist irgendwie ein Standard-Test von mir
Und das ist auch gut so, weil der Admin sonst ja nicht die Regeln editieren könnte :) im Client ist das RichEdit ReadOnly. :idea:

user profile iconlittleDave hat folgendes geschrieben:
Bug: an sich kann man ja keinen Tip mehr abgeben, sobald ein Spiel begonnen hat. Jedoch wird der OK-Button erst zu spät (nach ca. 1 Sekunde) deaktiviert. Das klappt aber nur, wenn man den Eintrag bereits ausgewählt hat, bevor das Spiel angefangen hat. Wenn man es in dieser Zeit aber schaft, den Knopf zu drücken, wird der Tip trotzdem eingetragen und im Server gespeichert.
Ja, das ist mir bekannt ;) und ich bin beeindruckt, das du das in so kurzer Zeit rausgefunden hast... :shock: Allerdings halte ich ein kürzeres Timer-Intervall als 1sec. für unnütz, weil in 1 Sekunde wird kein Spiel entscheidend verlaufen... :nixweiss:

user profile iconlittleDave hat folgendes geschrieben:
Die Synchronisation von neuen Spielen mit dem Server ist etwas mühsam. Gerade den großen Knopf unter Netzwerk und Anmeldung Klicken Sie auf diese Schaltfäche ... habe ich sehr schnell vergessen. Daher hab ich mich gewundert, warum neu erstellte Spiele nicht in der Liste angezeigt werden. Besser wäre es doch, ein Daten-Changed-Event automatisch vom Server per Broadcast an die Clients zu schicken.
Tja, ist das wirklich notwendig, die Spielanlage zu signalisieren? :gruebel: Es wäre jetzt nicht aufwändig (1 Zeile ;)), aber überflüssiger Datenverkehr, weil sooo viele Spiele werden wohl nicht live angelegt. :? Ich denk drüber nach.

user profile iconlittleDave hat folgendes geschrieben:
intuitive Benutzbarkeit: ich habe mich im Clienten kaum einarbeiten müssen ( < 1 min).
Fein, ich interpretiere das mal als "gelungen". ;)

user profile iconlittleDave hat folgendes geschrieben:
Aber gerade die kurze Entwicklungszeit finde ich beendruckend, da das Protokoll sehr solide und ausgereift wirkt.
:D

cu
Narses


Regan - Sa 31.05.08 17:02

Moin,

ich habs mir mal reingezogen und finde es ganz gut. Die Benutzerfreundlichkeit leidet ein bisschen unter dem Aussehen. Vor allem das Anmelden beim Client ist nicht grad sehr schön. Da sollten die Felder untereinander angeordnet werden und die Fenstergröße nicht verschiebbar sein. Die Checkbox "Nach der Anmeldung automatisch zur Rangliste" (kürzer: Gleich zur Rangliste) sieht man viel zu spät. Auch hier gilt das Prinzip des Untereinander anordnen, wie bei einem Formular. Würde Christian die Optionen und Dateianhänge unter den AbsendenButton machen, würde das auch keiner sehen. Weiterhin solltest du auch überlegen, den ganzen Anmeldekram einfach auszublenden und sofort zu den Spielen zu gehen. Ein Käfer: Wenn ich mich Anmelde und mein Benutzername und Passwort falsch ist, dann werden trotzdem ganz kurz die Tabs oben angeziegt. Hier würde ich auf ein Mainmenu oder eine Toolbar zurückgreifen.
Das Protokoll sollte eher in einem Extrafenster zuschaltbar sein und Optionen wie "Speichern" und "Löschen" beinhalten.
Die Aufteilung bei "Rangliste und Spielübersicht" (auch ganz schön lang) finde ich, ist sehr gut gewählt. Allerdings sollte das Programm erkennen, ob ich bereits einen Tipp abgeben habe und darauf hin dann die Caption vom Button ändern. Ein Käfer: Excel-Export funz net.

MfG
Regan


Narses - Mo 02.06.08 02:45

Moin!

user profile iconRegan hat folgendes geschrieben:
ich habs mir mal reingezogen
Danke für deinen Test.

user profile iconRegan hat folgendes geschrieben:
Die Benutzerfreundlichkeit leidet ein bisschen unter dem Aussehen.
OK, dir gefällt das Design der Anwendungen nicht (deine Kritikpunkte und Vorschläge beziehen sich hauptsächlich darauf), aber das stand auch gar nicht zum Test an. ;) Da du offensichtlich keine Probleme hattest, die Anwendungen zu bedienen, gehe ich mal davon aus, das der eigentliche Test deshalb im Wesentlichen erfolgreich verlaufen ist. :)

user profile iconRegan hat folgendes geschrieben:
Ein Käfer: Wenn ich mich Anmelde und mein Benutzername und Passwort falsch ist, dann werden trotzdem ganz kurz die Tabs oben angeziegt.
Ja, da war tatsächlich ein (jetzt toter) Käfer. ;)

user profile iconRegan hat folgendes geschrieben:
Das Protokoll sollte eher in einem Extrafenster zuschaltbar sein und Optionen wie "Speichern" und "Löschen" beinhalten.
Das Log ist doch in einem eigenen Tab. :nixweiss: Speichern und Löschen machen bei meinem Client-Konzept keinen Sinn (übrigens: Client und Server speichern beim Beenden automatisch das Log ab), man kann aber den Logtext notfalls über die Zwischenablage rauskopieren - und das Log ist eh nur für den Notfall vorgesehen.

user profile iconRegan hat folgendes geschrieben:
Allerdings sollte das Programm erkennen, ob ich bereits einen Tipp abgeben habe und darauf hin dann die Caption vom Button ändern.
Hab die Button-Caption geändert. ;)

user profile iconRegan hat folgendes geschrieben:
Ein Käfer: Excel-Export funz net.
Getestet mit W2k, WXP und O2k, O2k3, keine Probleme. Was geht nicht? :nixweiss:



user profile iconlittleDave hat folgendes geschrieben:
Bug: an sich kann man ja keinen Tip mehr abgeben, sobald ein Spiel begonnen hat. Jedoch wird der OK-Button erst zu spät (nach ca. 1 Sekunde) deaktiviert. Das klappt aber nur, wenn man den Eintrag bereits ausgewählt hat, bevor das Spiel angefangen hat. Wenn man es in dieser Zeit aber schaft, den Knopf zu drücken, wird der Tip trotzdem eingetragen und im Server gespeichert.
Es gibt jetzt ein einstellbares Sicherheitstimeout für die Spielabgabe (Default: 5 Minuten vorher), so dass dieser Fall keine Rolle mehr spielen sollte.

Details und Download wie immer im ersten Beitrag. ;)

cu
Narses


Regan - Mo 02.06.08 14:55

user profile iconNarses hat folgendes geschrieben:
user profile iconRegan hat folgendes geschrieben:
Ein Käfer: Excel-Export funz net.
Getestet mit W2k, WXP und O2k, O2k3, keine Probleme. Was geht nicht? :nixweiss: .

Es wird bei mir nur ein neues Exceldokument geöffnet. Und das ist leer :sad: . Ich habe Excel 2002 (10.6834.6830) SP3. Vielleicht hilft dir das weiter.
Sonst funktioniert alles, soweit ich das überblicken konnte. Ich werde das aber noch ein paar Belastungsproben unterziehen :wink: .


Narses - Mo 02.06.08 17:04

Moin!

Update auf 1.0.0.3/Client, 1.0.0.4/Server, siehe erster Beitrag.


user profile iconRegan hat folgendes geschrieben:
Es wird bei mir nur ein neues Exceldokument geöffnet. Und das ist leer
:shock: :gruebel:

user profile iconRegan hat folgendes geschrieben:
Ich habe Excel 2002 (10.6834.6830) SP3. Vielleicht hilft dir das weiter.
:? Hm, ehrlich gesagt nicht. Ist ein ganz einfacher OLE-Export... :nixweiss: Schonmal bei anderen oder eigenen Programmen Probleme damit gehabt?

user profile iconRegan hat folgendes geschrieben:
Sonst funktioniert alles, soweit ich das überblicken konnte. Ich werde das aber noch ein paar Belastungsproben unterziehen :wink: .
Mach das. :D

cu
Narses


Regan - Mo 02.06.08 19:04

user profile iconNarses hat folgendes geschrieben:
user profile iconRegan hat folgendes geschrieben:
Ich habe Excel 2002 (10.6834.6830) SP3. Vielleicht hilft dir das weiter.
:? Hm, ehrlich gesagt nicht. Ist ein ganz einfacher OLE-Export... :nixweiss: Schonmal bei anderen oder eigenen Programmen Probleme damit gehabt?

Öh, nein. Aber ehrlich gesagt habe ich das bei noch keinem Programm gehabt. Ich dachte bei dir ja auch zuerst, dass er mir einen Savedialog anzeigt, wo ich das Exceldokument denn speichern möchte :? .


Narses - Di 03.06.08 14:52

Moin!

Probier mal diesen Code aus, sollte sich einfach so übersetzen lassen. Wenn das klappt, dann weiß ich, warum es bei dir nicht ging. ;)

Delphi-Quelltext
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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  var
    Excel: Variant;
    ExcelOK: Boolean;
begin
  Button1.Enabled := FALSE;
  Screen.Cursor := crHourGlass;
  ExcelOK := TRUE;
  // Versuchen, eine Excel-Instanz zu erzeugen
  try // gibt es schon eine?
    Excel := GetActiveOleObject('Excel.Application');
  except
    try // sonst eine neue anlegen
      Excel := CreateOleObject('Excel.Application');
    except
      MessageDlg('Excel konnte nicht gestartet werden!?'#13+Exception(ExceptObject).Message,
                 mtError,[mbCancel],0);
      ExcelOK := FALSE;
    end;
  end;
  if ExcelOK then begin // Excel-Instanz erzeugt, los gehts
    try
      Excel.Workbooks.Add; // Arbeitsmappe anlegen
      Excel.Sheets[1].Name := 'TippKlick vom '+DateToStr(Now);
      // Header
      Excel.Cells[1,1].Value := 'Spiel';
      Excel.Cells[1,2].Value := 'Datum';
      Excel.Cells[1,3].Value := 'Ort';
      Excel.Cells[1,4].Value := 'Ergebnis';
      Excel.Cells[1,5].Value := 'Tipp UserID';
      Excel.Cells[1,6].Value := 'Punkte UserID';
      // Daten
      Excel.Cells[2,1].Value := 'GameName';
      Excel.Cells[2,2].Value := 'GameDate';
      Excel.Cells[2,3].Value := 'GameOrt';
      Excel.Cells[2,4].Value := 'GameResult';
      Excel.Cells[2,5].Value := '?';
      Excel.Cells[2,6].Value := 0;
    except
      MessageDlg('Excel-Export nicht erfolgreich!'#13+Exception(ExceptObject).Message,
                 mtError,[mbCancel],0);
    end;
    // Excel in den Vordergrund holen
    Excel.Visible := TRUE;
  end
  else
    MessageDlg('Excel konnte nicht gestartet werden!',mtError,[mbCancel],0);
  Screen.Cursor := crDefault;
  Button1.Enabled := TRUE;
end;

end.
cu
Narses


Regan - Di 03.06.08 15:19

Also der funktioniert sehr gut.


Narses - Mi 04.06.08 02:45

Moin!

Sollte jetzt klappen. ;)

cu
Narses


Regan - Mi 04.06.08 18:15

Moin,

mir ist gerade etwas aufgefallen: Ich hatte aus Versehen die alte Version des Servers gestartet. Als ich mich mit dem neuen Client anmelden wollte, kam kein Fehler oder etwas in der Art. Erst als ich im Protokoll nachgesehen habe, stand dort falscher Server.
Der Excelexport funktioniert perferkt :zustimm: .

MfG
Regan


Narses - Mi 04.06.08 23:32

Moin!

user profile iconRegan hat folgendes geschrieben:
Ich hatte aus Versehen die alte Version des Servers gestartet. Als ich mich mit dem neuen Client anmelden wollte, kam kein Fehler oder etwas in der Art.
Du wirst die Meldung bekommen haben, dass die Protokoll-Version der Gegenstelle nicht kompatibel ist und du die Anwendung aktualisieren sollst, schätze ich mal. ;) Und das ist korrekt so, für die komprimierte Datenübertragung seit v1.0.0.5 habe ich die Protokoll-Version nochmal hochgesetzt auf v3.0.

user profile iconRegan hat folgendes geschrieben:
Der Excelexport funktioniert perferkt
Fein. :)

Und sonst, was macht der Belastungstest? :D

cu
Narses


Regan - Do 05.06.08 08:55

user profile iconNarses hat folgendes geschrieben:
Moin!

user profile iconRegan hat folgendes geschrieben:
Ich hatte aus Versehen die alte Version des Servers gestartet. Als ich mich mit dem neuen Client anmelden wollte, kam kein Fehler oder etwas in der Art.
Du wirst die Meldung bekommen haben, dass die Protokoll-Version der Gegenstelle nicht kompatibel ist und du die Anwendung aktualisieren sollst, schätze ich mal.

Nein :P .
user profile iconNarses hat folgendes geschrieben:
Und sonst, was macht der Belastungstest?

Ich kann nichts schlimmes fesstellen. Sogar, wenn ich die Firewall blocken lasse oder zig Anwendungen daneben laufen lasse funktioniert alles.


FinnO - Do 05.06.08 20:58

also zur Intuitivität:

lief bei mir einwandfrei (erstes mal benutzt gerade eben)

Nur ich finde, du könntest die Server automatisch suchen, und nicht erst auf Buttonklick


Narses - Do 05.06.08 22:18

Moin!

user profile iconRegan hat folgendes geschrieben:
user profile iconNarses hat folgendes geschrieben:
user profile iconRegan hat folgendes geschrieben:
Ich hatte aus Versehen die alte Version des Servers gestartet. Als ich mich mit dem neuen Client anmelden wollte, kam kein Fehler oder etwas in der Art.
Du wirst die Meldung bekommen haben, dass die Protokoll-Version der Gegenstelle nicht kompatibel ist und du die Anwendung aktualisieren sollst, schätze ich mal.
Nein :P .
Großartige Fehlerbeschreibung... :roll:

Aber ich hab´ ihn trotzdem gefunden, den Käfer... 8) und getötet. :twisted: Update im ersten Beitrag! :D


user profile iconFinnO hat folgendes geschrieben:
also zur Intuitivität:
lief bei mir einwandfrei (erstes mal benutzt gerade eben)
Danke für deinen Test. ;)

user profile iconFinnO hat folgendes geschrieben:
Nur ich finde, du könntest die Server automatisch suchen, und nicht erst auf Buttonklick
Ähm :? das tut er doch auch, der Client; du musst natürlich den Server vorher starten... :nixweiss:

cu
Narses


Mitmischer 1703 - So 08.06.08 18:31

Ich steh' heute als Server offen :P :D
Benutzername: egal
Kennwort: leer
Hostname: 192.168.178.23

viel Spaß dann (wenns funzt) :twisted: :roll:


jakobwenzel - So 08.06.08 20:21

Du hast deine lokale IP angegeben, die nur innerhalb deines LANs funktioniert.
Wenn du willst, dass man von überall auf den Server zugreifen kann, musst du deine öffentliche IP nehmen, und an deinem Router eine Port-weiterleitung einreichten.


Narses - Mo 16.06.08 01:55

Moin!

Update auf v1.0.0.12 -final- (wie immer oben im ersten Beitrag)


Danke an Alle, die mitgetestet haben! ;)

cu
Narses


Narses - Mo 07.06.10 23:32

Moin!

Aus aktuellem Anlass :angel: Update auf v1.0.1.0 -final- (Bugfix, Rest wie immer oben im ersten Beitrag)


Nochmal Danke an Alle, die mitgetestet haben! ;)

cu
Narses