コード例 #1
0
ファイル: BrainConnector.cs プロジェクト: javirs85/javirsRepo
        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}]");
                        }
                    }
                }
            };
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
ファイル: BrainConnector.cs プロジェクト: javirs85/javirsRepo
 public void Send(ZeusMessage msg)
 {
     Send(msg.Serialize());
 }