Zuerst einmal vielen Dank für eure Hilfe und das Interesse.
@Sebastian.Lange:
Du hast dich nicht verlesen... Aber ich habe es korrigiert 😉 Jedoch weiß ich nicht, ob es nötig ist, da im Mini Chat Beispiel auch kein IPC verwendet wurde.
Client:
var protocolSetup = new Zyan.Communication.Protocols.Ipc.IpcBinaryClientProtocolSetup(Versioning.Lax);
_zyanConnection = new ZyanConnection(protocolSetup.FormatUrl("IPCZeit", "Zeit"), protocolSetup);
Server:
var protocolSetup = new Zyan.Communication.Protocols.Ipc.IpcBinaryServerProtocolSetup("IPCZeit", Versioning.Lax);
_zyanComponentHost = new ZyanComponentHost(name, protocolSetup);
Aber auch die Änderung brachte keine Lösung 🤔
@Abt:
Ich habe es jetzt mal wie folgt umgestellt:
Server:
public class Zeit : Interface.IZeit
{
private int _sekundeAlt;
#region Implementation of IZeit
public event Action<int> ZeitEvent;
public void GetZeit()
{
_sekundeAlt = System.DateTime.Now.Second;
while (true)
{
int sekundeNeu = System.DateTime.Now.Second;
if (_sekundeAlt != sekundeNeu)
{
var zeitEvent = ZeitEvent;
if (zeitEvent != null)
{
try
{
zeitEvent(sekundeNeu);
_sekundeAlt = sekundeNeu;
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
}
}
}
#endregion
}
Client:
class Program
{
static void Main(string[] args)
{
var zyanConnection = new Connection();
zyanConnection.OpenClient("Zeit", "192.168.2.148");
var zeit = zyanConnection.CreateProxy<IZeit>();
while(true)
{
if (Console.ReadLine().ToString() == "Start")
{
zeit.ZeitEvent += (sec) => Console.WriteLine("Client: " + sec);
}
}
}
}
Das Problem bleibt leider.
Gruß
..Heinz..
@weismat:
Danke für deine Antwort.
Zyan unterstützt zwar IPC, jedoch heißt es in der Doku: Doku für verteilte Ereignisse
Ereignisse funktionieren mit jedem ProtocolSetup. Und im Beispiel (Mini Chat) wird auch kein IPC verwendet.
@inflames2k:
Natürlich habe ich schon auf der Projektseite gesucht und mir auch das Mini Chat Beispiel herunter geladen und den Code durchsucht. Nur leider scheint es an einer Stelle zu haken.
Danke für deinen Link zum Broadcast Beispiel.
Wenn ihr noch weitere Ideen habt, dann nur her damit. Solange suche ich weiter 😃
Gruß
..Heinz..
Hallo,
ich habe weiter versucht, den Fehler zu finden, aber leider funktioniert es immer noch nicht.
Ich starte den Server, dann den Client; aber "ZeitEvent" im Server ist immer "null".
Habe ich etwas übersehen?
Ich benutze die Version 2.5.0.
Gruß
..Heinz..
Hallo,
ich habe ein kleines Problem mit Zyan.
Und zwar führe ich auf dem Server eine Berechnung durch und möchte, wenn diese fertig ist, auf dem Client die Anzeige ändern.
Dazu habe ich mir ein Event erstellt, welches im Server aufgerufen wird, wenn die Berechnung fertig ist und im Client "ausgeführt" wird.
Dan funktioniert leider nicht. Wenn ich am Server das Event konsumiere, läuft noch alles.
Anbei ein vereinfachter Code, der leider ebenso nicht funktioniert.
Server:
public class Zeit : Interface.IZeit
{
public Zeit()
{
int _sekundeAlt = System.DateTime.Now.Second;
while (true)
{
if (_sekundeAlt != System.DateTime.Now.Second)
{
if (ZeitEvent != null) ZeitEvent(this, new ZeitEventArgs() {Sekunde = DateTime.Now.Second});
_sekundeAlt = System.DateTime.Now.Second;
}
}
}
#region Implementation of IZeit
public event EventHandler<ZeitEventArgs> ZeitEvent;
#endregion
}
Client:
class Program
{
static void Main(string[] args)
{
var zyanConnection = new Connection();
zyanConnection.OpenClient("Zeit", "127.0.0.1");
var zeit = zyanConnection.CreateProxy<IZeit>();
zeit.ZeitEvent += (s, e) => { Console.WriteLine(e.Sekunde); };
Console.ReadLine();
}
}
Interface für Zyan:
public interface IZeit
{
event EventHandler<EventArgs.ZeitEventArgs> ZeitEvent;
}
Meine Zyan Configuration sieht wie folgt aus:
ZyanComponentHost.LegacyBlockingEvents = true;
var tcpBinaryServerProtocolSetup = new TcpBinaryServerProtocolSetup();
tcpBinaryServerProtocolSetup.UseWindowsSecurity = true;
tcpBinaryServerProtocolSetup.TcpPort = port;
_zyanComponentHost = new ZyanComponentHost(name, tcpBinaryServerProtocolSetup)
Könnt ihr mir vielleicht sagen, ob etwas fehlt?
Gruß
..Heinz..
Hallo m.knigge,
ich habe "Scanner Address Stamping" und "Scanner Delimiter" schon deaktiviert. Der "two-way Mode" sowie "ACK/NACK" sind aktiviert.
Antworten von der "Ladestation" bekomme ich angezeigt, von daher ist es richtig eingerichtet; nur das Schicken von Nachrichten vom PC zum Scanner funktioniert nicht. Deshalb bin ich mir sicher, dass es am Schreiben zum COM-Port liegt...
Die Leerzeichen habe ich inzwischen entfernt...g
Gruß
..Heinz..
Hallo Joetempes,
ich benutze de Powerscan M8300 der Firma Datalogic. In der Anleitung habe ich nichts über einen Header gefunden. Habe deinen Code jedoch getestet, vllt. habe ich in der Anleitung etwas überlesen; aber es funktionierte leider nicht 😦
Text sollte man eigentlich direkt hin schicken können, mit einem "CR" am Ende, aber auch das nimmt er nicht an.
Trotzdem danke für die Antworten
..Heinz..
Hallo herbivore,
habe ich auch schon versucht, aber genau das gleiche.
Wenn ich normalen Text hinschicke, wird dieser auch nicht angezeigt.
Das Lesen vom Scanner funktioniert ohne Probleme, nur beim Hinschicken will er nicht
Gruß
..Heinz..
Hallo,
ich habe ein kleines Problem und weiß absolut nicht weiter.
Ich habe eine Barcodescanner, er seriell angebunden ist.
Eingescannte Daten auslesen ist kein Problem. Nur würde ich gerne, nachdem ein Barcode gescannt wurde, auf das Display des Scanners einen Text senden bzw. die rote bzw. die gründe Kontrolleuchte aufleuchten lassen.
Der Code, um die grüne Leuchte einzuschalten ist
ESC [ 6 q
.
Ich sende die Daten wie folgt an den Scanner
public string Esc = ((char)27).ToString();
public void WriteDataToSerialPort(string data)
{
if (_serialPort != null && _serialPort.IsOpen)
{
byte[] buffer = Encoding.ASCII.GetBytes(data);
_serialPort.Write(buffer, 0, buffer.Length);
_serialPort.BaseStream.Flush();
}
}
public void Led()
{
WriteDataToSerialPort(Esc + "[ 6 q");
}
Nur wird der Befehl vom Scanner nicht angenommen.
Habe ich vlt. etwas bei der Übertragung vergessen?
Gruß
Heinz
Hi,
ich habe ein Problem beim Anzeigen eines Dialoges im Bootstrapper.
Ich will im Bootstrapper einen Dialog anzeigen. In dem Dialog werden Einstellungen vorgenommen, die für den Start des Programms wichtig sind. Wenn dieser geschlossen wird, soll die ShellView angezeigt werden.
public class Bootstrapper : Caliburn.Micro.Bootstrapper
{
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
base.OnStartup(sender, e);
if (new Models.Start().Init())
{
var windowManagerShell = new WindowManager();
var viewModelShell = new ViewModels.ShellViewModel();
windowManagerShell.ShowDialog(viewModelShell);
base.Configure();
}
}
}
In Models.Start().Init() wird der Dialog zum Setzen der Einstellungen geöffnet. Die ShellView wird allerdings nicht angezeigt.
Ich verstehe nicht, wo der Fehler sein könnte.
Vllt. könnt ihr mir helfen.
Gruß
Heinz