xorg1990
New member
Hi, hoffe her gibt es c#'ler.
Ich arbeite gerade an einer WebSocket zu COM Port Bridge.
Der Server basiert auf Fleck:
https://github.com/statianzo/Fleck
Wenn ich aber die Verbindung schließe erhalte ich diese Fehlermeldung:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei COM.WEBSocket.onClose() in C:\Users\****\Documents\Visual Studio 2015\Projects\COM\COM\WEBSocket.cs:Zeile 67.
In Zeile 67 steht:
if (serialPort.IsOpen)
Ist das eine erstes Problem oder kann ich das ignorieren? Anwendung läuft problemlos weiter die Com Port Funktionalität ist noch nicht überprüft.
Asso, das ganze wird als dll compiliert.
Ich arbeite gerade an einer WebSocket zu COM Port Bridge.
Der Server basiert auf Fleck:
https://github.com/statianzo/Fleck
Wenn ich aber die Verbindung schließe erhalte ich diese Fehlermeldung:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei COM.WEBSocket.onClose() in C:\Users\****\Documents\Visual Studio 2015\Projects\COM\COM\WEBSocket.cs:Zeile 67.
In Zeile 67 steht:
if (serialPort.IsOpen)
Ist das eine erstes Problem oder kann ich das ignorieren? Anwendung läuft problemlos weiter die Com Port Funktionalität ist noch nicht überprüft.
Code:
using System;
using System.IO.Ports;
using Fleck;
using System.Diagnostics;
namespace COM
{
public static class WEBSocket
{
private static IWebSocketConnection connection = null;
private static SerialPort serialPort;
private static int pid = 0;
public static void start(int id, string port)
{
pid = id;
var server = new WebSocketServer("ws://127.0.0.1:"+port);
server.RestartAfterListenError = true;
server.SupportedSubProtocols = new[] { "COM" };
server.Start(socket =>
{
socket.OnOpen = () => onOpen(socket);
socket.OnMessage = message => onMessage(message);
socket.OnClose = () => onClose();
});
}
private static void onOpen(IWebSocketConnection sock)
{
if (connection == null)
{
connection = sock;
string[] ports = SerialPort.GetPortNames();
string Ports = String.Join(",", ports);
connection.Send(Ports);
}
}
private static void onMessage(string message)
{
//message will be "comPort, dtrOrRTS, onOrOff";
Char delimiter = ',';
string[] ports = message.Split(delimiter);
serialPort = new SerialPort(ports[0]);
if (ports[2] == "on")
{
if (ports[1] == "dtr")
{
serialPort.DtrEnable = true;
serialPort.RtsEnable = false;
}
else
{
serialPort.DtrEnable = false;
serialPort.RtsEnable = true;
}
serialPort.Open();
}
else //off
{
serialPort.Close();
}
}
private static void onClose()
{
try
{
if (serialPort.IsOpen)
{
serialPort.Close();
// Process p = Process.GetProcessById(pid);
// p.Kill();
}
}catch(Exception ex)
{
Console.WriteLine(ex);
// Process p = Process.GetProcessById(pid);
// p.Kill();
}
connection = null;
}
}
}
Asso, das ganze wird als dll compiliert.