示例#1
0
        // ReSharper disable once TooManyDeclarations
        private async void  ThreadProc(object state)
        {
            try
            {
                string        imei;
                var           client = (TcpClient)state;
                byte[]        buffer = new byte[client.ReceiveBufferSize];
                NetworkStream stream = ((TcpClient)state).GetStream();
                stream.Read(buffer, 0, client.ReceiveBufferSize);
                imei = CleanInput(Encoding.ASCII.GetString(buffer.ToArray()).Trim());
                if (Commonhelper.IsValidImei(imei))
                {
                    await ParseAvlDataAsync(client, stream, imei).ConfigureAwait(false);
                }
            }
            catch (InvalidCastException e)
            {
                Trace.TraceWarning(e.Message);
                _log.Error($"{DateTime.Now} -Error message : {e.Message}  details : {e.InnerException?.Message}");
            }
            catch (Exception e)
            {
                Trace.TraceWarning(e.Message);
                _log.Error($"{DateTime.Now} -Error message : {e.Message}  details : {e.InnerException?.Message}");

                //throw;
            }
        }
示例#2
0
        public string GetIMEI(byte[] buffer, int recievedBytes)
        {
            var imei         = string.Empty;
            var dataReceived = Encoding.ASCII.GetString(buffer, 2, recievedBytes);

            if (imei != string.Empty || !Commonhelper.IsValidImei(dataReceived))
            {
                return(imei);
            }
            imei = dataReceived;
            return(imei);
        }
示例#3
0
 // ReSharper disable once TooManyDeclarations
 private async void  ThreadProc(object state)
 {
     try
     {
         var           client    = (TcpClient)state;
         byte[]        buffer    = new byte[client.ReceiveBufferSize];
         NetworkStream stream    = ((TcpClient)state).GetStream();
         int           bytesRead = stream.Read(buffer, 0, client.ReceiveBufferSize) - 2;
         string        imei      = Encoding.ASCII.GetString(buffer, 2, bytesRead);
         if (Commonhelper.IsValidImei(imei))
         {
             await ParseAvlData(client, stream, imei);
         }
     }
     catch (InvalidCastException e)
     {
         Trace.TraceWarning(e.Message);
     }
     catch (Exception e)
     {
         Trace.TraceWarning(e.Message);
         //throw;
     }
 }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="state"></param>
        private static async void ThreadProc(object state)
        {
            var client = (TcpClient)state;

            byte[]        buffer       = new byte[client.ReceiveBufferSize];
            NetworkStream stream       = ((TcpClient)state).GetStream();
            int           bytesRead    = stream.Read(buffer, 0, client.ReceiveBufferSize) - 2;
            string        dataReceived = Encoding.ASCII.GetString(buffer, 2, bytesRead);

            try
            {
                if (Commonhelper.IsValidImei(dataReceived))
                {
                    await ParseTeltonikaData(client, stream, buffer, dataReceived);

                    //client.Close();
                }
                // il s'agit du format de nouveaux boitiers créent par khaled
                else if (dataReceived.Contains(",") && !dataReceived.Contains("("))
                {
                    arduinoBox = true;
                    NewBoxParser parser = new NewBoxParser();
                    dataReceived = dataReceived.Replace("\r\n", "").Replace("\r", "").Replace("\n", "");
                    try
                    {
                        var result = parser.Parse(dataReceived.Split('\r'));
                        foreach (var r in result)
                        {
                            await _bus.Publish(r);
                        }
                    }
                    catch (ValidationException e)
                    {
                        _log.Error("error message :" + e.Message + " details:" + e.InnerException + " at:" + DateTime.Now);
                        //throw;
                    }
                }
                else
                {
                    // boitier GT02A
                    Tk1003Parser parser = new Tk1003Parser();
                    arduinoBox = false;
                    var result = parser.Parse(dataReceived.Split('\r'));
                    // envoyer une message de reception et une déconnexion aux clients
                    if (client.Connected)
                    {
                        await SendCommand(stream, result.FirstOrDefault().Value, client);
                    }

                    foreach (var r in result)
                    {
                        foreach (var createTk103Gpse in r.Key)
                        {
                            await _bus.Publish(createTk103Gpse);
                        }
                    }

                    // client.Close();
                }
            }
            catch (Exception e)
            {
                _log.Error("error message :" + e.Message + " details:" + e.InnerException + " at:" + DateTime.Now);
                Console.WriteLine(e);
                if (!arduinoBox)
                {
                    client.Close();
                }
            }



            // Console.ReadLine();
        }
示例#5
0
        public override async Task OnConnectedAsync(ConnectionContext connection)
        {
            _logger.LogInformation("new connection: " + connection.ConnectionId + ":" + connection.RemoteEndPoint.AddressFamily);
            var imei = string.Empty;

            while (true)
            {
                try
                {
                    await semaphore.WaitAsync().ConfigureAwait(false);

                    var result = await connection.Transport.Input.ReadAsync().ConfigureAwait(false);

                    var           buffer       = result.Buffer;
                    StringBuilder builder      = new StringBuilder();
                    var           receivedData = new List <byte []>();
                    foreach (var segment in buffer)
                    {
                        builder.Append(Encoding.ASCII.GetString(segment.ToArray(), 0, segment.ToArray().Length));
                        receivedData.Add(segment.ToArray());
                    }
                    var data = builder.ToString();
                    // remove bad characters
                    data = Regex.Replace(data, @"[^\w\.@-]", "", RegexOptions.None);
                    // if the data  received is  valid imei we send to modem 1
                    if (Commonhelper.IsValidImei(data))
                    {
                        byte[] b = { 0x01 };
                        _logger.LogInformation($"new modem connected with id : {data}");
                        imei = data;
                        var command = new CreateBoxCommand();
                        command.Imei = imei;
                        await _mediator.Send(command).ConfigureAwait(false);

                        await connection.Transport.Output.WriteAsync(b).ConfigureAwait(false);
                    }
                    // if the data received is avl data we parse the avl data and send to the modem the number of data received
                    else
                    {
                        foreach (var receivedBytes in receivedData)
                        {
                            var gpsResult = await ParseAvlDataAsync(imei, receivedBytes).ConfigureAwait(false);

                            var events = new TLGpsDataEvents
                            {
                                Id     = Guid.NewGuid(),
                                Events = gpsResult
                            };
                            var bytes = Convert.ToByte(gpsResult.Count);
                            await connection.Transport.Output.WriteAsync(new byte[] { 0x00, 0x00, 0x00, bytes }).ConfigureAwait(false);

                            _mediator.Publish(events).GetAwaiter();
                        }
                    }
                    if (result.IsCompleted)
                    {
                        break;
                    }
                    semaphore.Release();
                    connection.Transport.Input.AdvanceTo(buffer.End);
                }
                catch (Exception e)
                {
                    _logger.LogError(e.Message);
                    _logger.LogError(e.InnerException?.Message);
                    semaphore.Release();
                    break;
                }
            }

            Console.WriteLine(connection.ConnectionId + " disconnected");
        }