public List <DataPacket> ReceiveMessage()
        {
            List <DataPacket> dpsReceived = new List <DataPacket>();

            try
            {
                if (Client.Connected && ServerStream.DataAvailable)
                {
                    byte[] inStream = new byte[Client.ReceiveBufferSize];

                    int recb = ServerStream.Read(inStream, 0, Client.ReceiveBufferSize);
                    if (recb == 0)
                    {
                        return(null);
                    }

                    string returndata = System.Text.Encoding.ASCII.GetString(inStream);
                    returndata = returndata.Replace("\0", "");
                    if (returndata.Length > 0)
                    {
                        Logger.Log("ReceivedData*** " + returndata);
                        foreach (string oneData in returndata.Split("|".ToCharArray()))
                        {
                            try
                            {
                                if (!string.IsNullOrEmpty(oneData) && oneData != "|" && oneData != " ")
                                {
                                    dpsReceived.Add(JsonConvert.DeserializeObject <DataPacket>(oneData));
                                }
                            }
                            catch (Exception OneParseEx)
                            {
                                Logger.Log("OneParseEx ", OneParseEx);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Log("Error while receiving. " + ex.Message);
            }
            return(dpsReceived);
        }
Exemple #2
0
        /// <summary>
        /// This will send a request for sensor initialization to the SensorNetworkServer, where the
        /// SensorNetworkServer will then respond with sensor initialization.
        /// </summary>
        /// <returns>The sensor initialization byte array.</returns>
        private byte[] RequestAndAcquireSensorInitialization()
        {
            // Start the server that will expect the Sensor Configuration
            Server.Start();

            // Wait for the SensorNetworkClient to send the initialization
            TcpClient localClient;

            byte[] receivedInit = new byte[SensorNetworkConstants.SensorNetworkSensorCount];

            // Once this line is passed, we have connected and received the initialization
            localClient = Server.AcceptTcpClient();
            logger.Info($"{Utilities.GetTimeStamp()}: Simulation Sensor Network received Sensor Initialization");
            ServerStream = localClient.GetStream();
            ServerStream.Read(receivedInit, 0, receivedInit.Length);

            // We will now dispose of the Server/Stream components because that is the only time we are using it
            ServerStream.Close();
            ServerStream.Dispose();
            Server.Stop();

            return(receivedInit);
        }
        bool InitiateConnection()
        {
            InitInProgress = true;

            bool bSend, bReceive, bPacketSend, bPacketReceive;

            bSend = bReceive = bPacketSend = bPacketReceive = false;
            string data = "";

            byte[] ByteData;

            DataPacket dpTest = new DataPacket();

            try
            {
                Logger.Log("Connecting to server...");

                Client.Connect(RSName, RSPort);

                ServerStream = Client.GetStream();

                Logger.Log("Connection Negotiator Initiated For Server ");

                AuthToken = "";
                DateTime dtTimeStageStarted = DateTime.Now;
                TimeSpan NegotiateStageTime, NegotiateTotalTime;

                NegotiateStageTime = new TimeSpan(0, 0, 0, 1, 200);
                NegotiateTotalTime = new TimeSpan(0, 0, 1, 0);

                DateTime dtTimeNegEndTime = DateTime.Now + NegotiateTotalTime;
                int      PresentStageId   = 0;
                int      AttemptCount     = 0;

                //bool bSend, bReceive, bPacketSend, bPacketReceive;
                bSend = bReceive = bPacketSend = bPacketReceive = false;

                List <DataPacket> dpTestPackets = new List <DataPacket>();

                Logger.Log("Connection Negotiator Server Start " + " StT: " + DateTime.Now.ToString("HH:mm:ss:fff") + " - EdT: " + dtTimeNegEndTime.ToString("HH:mm:ss:fff"));

                while ((DateTime.Now <= dtTimeNegEndTime) && string.IsNullOrEmpty(AuthToken) && Logger.ThreadLife)
                {
                    switch (PresentStageId)
                    {
                    case 0:     // ReceiveTest (New)

                        #region Init_Receive_Test

                        Logger.Log("Init_Receive_Test Started #" + AttemptCount);

                        try
                        {
                            Logger.Log("Server " + Client.Connected + " / " + ServerStream.DataAvailable + " / " + Client.Available + " on Init_Receive_Test @ " + AttemptCount);

                            if (Client.Connected && ServerStream.DataAvailable)
                            {
                                ByteData = new byte[Client.ReceiveBufferSize];
                                int recb = ServerStream.Read(ByteData, 0, Client.ReceiveBufferSize);

                                if (recb == 0)
                                {
                                    Logger.Log("Init_Receive_Test DataCount " + recb + " Length @ #: " + AttemptCount);
                                    continue;
                                }
                                else
                                {
                                    Logger.Log("Init_Receive_Test DataCount " + recb + " Length @ #: " + AttemptCount);
                                }

                                data = System.Text.Encoding.ASCII.GetString(ByteData);

                                if (data.Length > 0)
                                {
                                    bReceive = true;
                                    Logger.Log("Init_Receive_Test Success @ #: " + AttemptCount + " D: " + data);

                                    PresentStageId++;
                                    AttemptCount = 0;
                                }
                                else
                                {
                                    Logger.Log("Init_Receive_Test Data 0 Length @ #: " + AttemptCount);
                                }
                            }
                            else
                            {
                                Logger.Log("Server NA / ND on Init_Receive_Test @ " + AttemptCount);
                                Logger.Log("Server " + Client.Connected + " / " + ServerStream.DataAvailable + " on Init_Receive_Test @ " + AttemptCount);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Log("Init_Receive_Test #" + AttemptCount + " Err: " + ex.Message);
                        }

                        if (!bReceive)
                        {
                            Logger.Log("Init_Receive_Test Failed @ #" + AttemptCount);
                            for (int j = 0; j <= 1000000; j++)
                            {
                            }                                          // give a small delay
                            AttemptCount++;
                        }


                        #endregion Init_Receive_Test
                        break;

                    case 1:     // Write Test (0-ReceiveTest)

                        #region Init_Send_Test

                        Logger.Log("Init_Send_Test Started #" + AttemptCount);

                        try
                        {
                            ByteData = Encoding.ASCII.GetBytes(DateTime.Now.ToString("dd MM yyyy HH mm ss") + "$");

                            if (Client.Connected && ServerStream.CanWrite)
                            {
                                ServerStream.Write(ByteData, 0, ByteData.Length);
                                ServerStream.Flush();

                                Logger.Log("Init_Send_Test Success @ #" + AttemptCount);
                                bSend = true;
                                PresentStageId++; AttemptCount = 0;
                            }
                            else
                            {
                                Logger.Log("Server NA / Non-Writable on Init_Send_Test @ " + AttemptCount);
                                Logger.Log("Server " + Client.Connected + " / " + ServerStream.CanWrite + " on Init_Send_Test @ " + AttemptCount);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Log("Init_Send_Test Error on #" + AttemptCount + " Error: " + ex.Message);
                        }

                        if (!bSend)
                        {
                            Logger.Log("Init_Send_Test Failed @ #" + AttemptCount);
                            for (int j = 0; j <= 4000000; j++)
                            {
                            }                                          // give a small delay
                            AttemptCount++;
                        }

                        #endregion
                        break;

                    case 2:     // ReceivePacket (0-Write-Completed, 1-Receive-Completed, 2-SendPacketCompleted)

                        #region Init_ReceivePacket_Test

                        Logger.Log("Init_ReceivePacket_Test Started #" + AttemptCount);

                        try
                        {
                            Logger.Log("Server " + Client.Connected + " / " + Client.Available + " / " + ServerStream.DataAvailable + "  on Init_ReceivePacket_Test @ " + AttemptCount);

                            if (Client.Connected && Client.Available > 0)
                            {
                                ByteData = new byte[Client.ReceiveBufferSize];
                                int recb = ServerStream.Read(ByteData, 0, Client.ReceiveBufferSize);
                                if (recb == 0)
                                {
                                    Logger.Log("Init_ReceivePacket_Test DataCount " + recb + " Length @ #: " + AttemptCount);
                                    continue;
                                }
                                else
                                {
                                    Logger.Log("Init_ReceivePacket_Test DataCount " + recb + " Length @ #: " + AttemptCount);
                                }

                                data = System.Text.Encoding.ASCII.GetString(ByteData);

                                if (data.Length > 0)
                                {
                                    //bPacketReceive = true;
                                    Logger.Log("Init_ReceivePacket_Test Success @ #: " + AttemptCount + " D: " + data);

                                    try
                                    {
                                        foreach (string oneData in data.Split("|".ToCharArray()))
                                        {
                                            try
                                            {
                                                if (bPacketReceive)
                                                {
                                                    continue;
                                                }

                                                dpTest = new DataPacket();
                                                dpTest = JsonConvert.DeserializeObject <DataPacket>(oneData);

                                                if (!string.IsNullOrEmpty(dpTest.SenderID))
                                                {
                                                    ServerID = dpTest.SenderID;

                                                    bPacketReceive = true;
                                                    Logger.Log("Init_ReceivePacket_Test Success #" + AttemptCount);

                                                    PresentStageId++;
                                                    AttemptCount = 0;
                                                }
                                                else
                                                {
                                                    Logger.Log("Init_ReceivePacket_Test OneParse Err SenderID Empty");
                                                }
                                            }
                                            catch (Exception OneParseEx)
                                            {
                                                Logger.Log("Init_ReceivePacket_Test OneParseEx #" + OneParseEx.Message);
                                            }
                                        }
                                    }
                                    catch (Exception ParseEx)
                                    {
                                        Logger.Log("Init_ReceivePacket_Test ParseEx #" + ParseEx.Message);
                                    }
                                }
                                else
                                {
                                    Logger.Log("Init_ReceivePacket_Test Data 0 Length @ #: " + AttemptCount);
                                }
                            }
                            else
                            {
                                Logger.Log("Server NA / ND on Init_ReceivePacket_Test @ " + AttemptCount);
                                Logger.Log("Server " + Client.Connected + " / " + Client.Available + " on Init_ReceivePacket_Test @ " + AttemptCount);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Log("Init_ReceivePacket_Test #" + AttemptCount + " Err" + ex.Message);
                        }

                        if (!bPacketReceive)
                        {
                            Logger.Log("Init_ReceivePacket_Test Failed @ #" + AttemptCount);
                            for (int j = 0; j <= 1000000; j++)
                            {
                            }                                          // give a small delay
                            AttemptCount++;
                        }


                        #endregion Init_ReceivePacket_Test
                        break;

                    case 3:     // SendPacket (0-Write-Completed, 1-Receive-Completed)

                        #region Init_SendPacket_Test
                        Logger.Log("Init_SendPacket_Test Started @ #" + AttemptCount);

                        dpTest               = new DataPacket();
                        dpTest.Message       = "Client Test Data";
                        dpTest.SenderID      = AppID;
                        dpTest.SenderType    = AppType.Server;
                        dpTest.RecepientID   = "Unknown";
                        dpTest.RecepientType = AppType.Client;
                        dpTest.TimeStamp     = DateTime.Now;

                        try
                        {
                            data     = JsonConvert.SerializeObject(dpTest);
                            ByteData = Encoding.ASCII.GetBytes(data + "|");

                            if (Client.Connected && ServerStream.CanWrite)
                            {
                                ServerStream.Write(ByteData, 0, ByteData.Length);
                                ServerStream.Flush();

                                Logger.Log("Init_SendPacket_Test Success @ #" + AttemptCount);
                                bPacketSend = true;
                                PresentStageId++; AttemptCount = 0;
                            }
                            else
                            {
                                Logger.Log("Server NA / Non-Writable on Init_SendPacket_Test @ " + AttemptCount);
                                Logger.Log("Server " + Client.Connected + " / " + ServerStream.CanWrite + " on Init_SendPacket_Test @ " + AttemptCount);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Log("Init_SendPacket_Test #" + AttemptCount + " Err: " + ex.Message);
                        }


                        if (!bPacketSend)
                        {
                            Logger.Log("Init_SendPacket_Test Failed @ #" + AttemptCount);
                            for (int j = 0; j <= 4000000; j++)
                            {
                            }                                          // give a small delay
                            AttemptCount++;
                        }


                        #endregion Init_SendPacket_Test
                        break;

                    default:
                        Logger.Log("Unknown Stage ID" + PresentStageId);
                        break;
                    }

                    //(0 - Write - Completed, 1 - Receive - Completed, 2 - SendPacketCompleted, 3 - ReceivePacket)
                    if (bSend && bReceive && bPacketReceive && bPacketSend)
                    {
                        AuthToken = ServerID;
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                }

                Logger.Log("Connection Negotiator Ended For Server");

                if (!string.IsNullOrEmpty(AuthToken))
                {
                    Logger.Log("Client Sucessfully registered " + ServerID);
                    return(true);
                }
                else
                {
                    Logger.Log("Client Initiation UnSuccessfull " + ServerID + " [ " + bSend + bReceive + bPacketSend + bPacketReceive + " ] ");
                    ///To validate - non-UI mode stuff
                    Logger.ThreadLife = false;
                    Logger.Log("Thread Kill Request Raised");
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Logger.Log("Error while connecting to server");
                Logger.Log("Client Initiation UnSuccessfull " + ServerID + " [ " + bSend + bReceive + bPacketSend + bPacketReceive + " ] ");
                Logger.Log(ex.Message);
                return(false);
            }
            finally
            {
                InitInProgress = false;
            }
        }