public BrainConnector(TCPComm.TCPConnector _conn) { connector = _conn; connector.newError += (o1, err) => { g_NewNetworkError(this, err); }; connector.newRawMessage += (o, str) => { if (str == "") { g_DeviceClosed?.Invoke(this, null); connector.Dispose(); return; } var msgs = TCPComm.Utils.SplitIntoMessages(str); foreach (var raw in msgs) { var msg = ZeusMessage.fromString(raw); if (msg.Token != NetUtils.Token.Token) { g_WrongToken.Invoke(this, msg); } else { switch (msg.Order) { case messageKinds.heartbeat: break; case messageKinds.present: g_Present?.Invoke(this, msg); break; case messageKinds.showYourWindow: g_ShowSoftwareWindow?.Invoke(this, EventArgs.Empty); break; case messageKinds.config_ok: g_ConfigOk?.Invoke(this, msg); break; case messageKinds.deviceClosed: g_DeviceClosed?.Invoke(this, msg); connector.Dispose(); break; case messageKinds.majorErrorInDevice: g_NewErrorFromDevice?.Invoke(this, msg); break; default: throw new Exception($"Unnexpected Order: [{msg.Order}] received from device [{this.remoteName}]"); } } } }; }
private void CatchPresentMessage(object sender, string deviceMessage) { try { var msg = ZeusMessage.fromString(deviceMessage); if (msg.Token != NetUtils.Token.Token) { //this device is not for our system Gtec2.Error.appendNewError(new Exception($"Bad Token. Expected {NetUtils.Token.Token} found {msg.Token}")); } else if (msg.Order == messageKinds.present) { var con = sender as TCPConnector; con.newRawMessage -= CatchPresentMessage; Limbo.Remove(con); var ZConn = new ZeusDeviceConnector(con); ZConn.remoteID = int.Parse(msg.Params["ID"].ToString()); ZConn.remoteName = msg.Params["Name"].ToString(); g_newDeviceConnected(this, new ConnectionInfo() { ID = ZConn.remoteID, Name = ZConn.remoteName, Connector = ZConn }); } else if ((msg.Order == messageKinds.deviceClosed)) { ;// a device was closed before teh present message was sent. We do nothing, the TCPServer layer will remove left overs. } else { throw new Exception($"Received a {msg.Order} message from a device that never sent us the Present message"); } } catch (Exception e2) { throw e2; } }
public void Send(ZeusMessage msg) { Send(msg.Serialize()); }