Ejemplo n.º 1
0
        private void CatchPresentMessage(object sender, string deviceMessage)
        {
            try
            {
                var msgs = TCPComm.Utils.SplitIntoMessages(deviceMessage);



                if (deviceMessage == "")
                {
                    var con = sender as TCPConnector;
                    con.Dispose();
                    return;
                }

                var msg = BrainMessage.fromString(msgs[0]);

                if (msg.Token != NetUtils.Token.Token)
                {
                    //this device is not for our system
                    g_NewErrorFromDevice(null, 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 BrainConnector(con);
                    ZConn.remoteID   = int.Parse(msg.Params["myID"].ToString());
                    ZConn.remoteName = msg.Params["myName"].ToString();
                    g_newDeviceConnected(this, new ConnectionInfo()
                    {
                        ID        = ZConn.remoteID,
                        Name      = ZConn.remoteName,
                        Connector = ZConn,
                        Default   = msg.Params["Default"]?.ToString(),
                        Solution  = msg.Params["Solution"]?.ToString()
                    });
                }
                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.
                    return;
                }
                else
                {
                    throw new Exception($"Received a {msg.Order} message from a device that never sent us the Present message");
                }
            }
            catch (Exception e2)
            {
                g_newDebugMessage(this, e2.Message);
            }
        }
Ejemplo n.º 2
0
        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 = BrainMessage.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.update:
                            g_Update(this, msg.Params);
                            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}]");
                        }
                    }
                }
            };
        }
Ejemplo n.º 3
0
 public void Send(BrainMessage msg)
 {
     Send(msg.Serialize());
 }