is connection is working
This commit is contained in:
parent
c8fb68b160
commit
d7019de1ed
3 changed files with 221 additions and 11 deletions
210
.credo.exs
Normal file
210
.credo.exs
Normal file
|
|
@ -0,0 +1,210 @@
|
||||||
|
# This file contains the configuration for Credo and you are probably reading
|
||||||
|
# this after creating it with `mix credo.gen.config`.
|
||||||
|
#
|
||||||
|
# If you find anything wrong or unclear in this file, please report an
|
||||||
|
# issue on GitHub: https://github.com/rrrene/credo/issues
|
||||||
|
#
|
||||||
|
%{
|
||||||
|
#
|
||||||
|
# You can have as many configs as you like in the `configs:` field.
|
||||||
|
configs: [
|
||||||
|
%{
|
||||||
|
#
|
||||||
|
# Run any config using `mix credo -C <name>`. If no config name is given
|
||||||
|
# "default" is used.
|
||||||
|
#
|
||||||
|
name: "default",
|
||||||
|
#
|
||||||
|
# These are the files included in the analysis:
|
||||||
|
files: %{
|
||||||
|
#
|
||||||
|
# You can give explicit globs or simply directories.
|
||||||
|
# In the latter case `**/*.{ex,exs}` will be used.
|
||||||
|
#
|
||||||
|
included: [
|
||||||
|
"lib/",
|
||||||
|
"src/",
|
||||||
|
"test/",
|
||||||
|
"web/",
|
||||||
|
"apps/*/lib/",
|
||||||
|
"apps/*/src/",
|
||||||
|
"apps/*/test/",
|
||||||
|
"apps/*/web/"
|
||||||
|
],
|
||||||
|
excluded: [~r"/_build/", ~r"/deps/", ~r"/node_modules/"]
|
||||||
|
},
|
||||||
|
#
|
||||||
|
# Load and configure plugins here:
|
||||||
|
#
|
||||||
|
plugins: [],
|
||||||
|
#
|
||||||
|
# If you create your own checks, you must specify the source files for
|
||||||
|
# them here, so they can be loaded by Credo before running the analysis.
|
||||||
|
#
|
||||||
|
requires: [],
|
||||||
|
#
|
||||||
|
# If you want to enforce a style guide and need a more traditional linting
|
||||||
|
# experience, you can change `strict` to `true` below:
|
||||||
|
#
|
||||||
|
strict: false,
|
||||||
|
#
|
||||||
|
# To modify the timeout for parsing files, change this value:
|
||||||
|
#
|
||||||
|
parse_timeout: 5000,
|
||||||
|
#
|
||||||
|
# If you want to use uncolored output by default, you can change `color`
|
||||||
|
# to `false` below:
|
||||||
|
#
|
||||||
|
color: true,
|
||||||
|
#
|
||||||
|
# You can customize the parameters of any check by adding a second element
|
||||||
|
# to the tuple.
|
||||||
|
#
|
||||||
|
# To disable a check put `false` as second element:
|
||||||
|
#
|
||||||
|
# {Credo.Check.Design.DuplicatedCode, false}
|
||||||
|
#
|
||||||
|
checks: %{
|
||||||
|
enabled: [
|
||||||
|
#
|
||||||
|
## Consistency Checks
|
||||||
|
#
|
||||||
|
{Credo.Check.Consistency.ExceptionNames, []},
|
||||||
|
{Credo.Check.Consistency.LineEndings, []},
|
||||||
|
{Credo.Check.Consistency.ParameterPatternMatching, []},
|
||||||
|
{Credo.Check.Consistency.SpaceAroundOperators, []},
|
||||||
|
{Credo.Check.Consistency.SpaceInParentheses, []},
|
||||||
|
{Credo.Check.Consistency.TabsOrSpaces, []},
|
||||||
|
|
||||||
|
#
|
||||||
|
## Design Checks
|
||||||
|
#
|
||||||
|
# You can customize the priority of any check
|
||||||
|
# Priority values are: `low, normal, high, higher`
|
||||||
|
#
|
||||||
|
{Credo.Check.Design.AliasUsage,
|
||||||
|
[priority: :low, if_nested_deeper_than: 2, if_called_more_often_than: 0]},
|
||||||
|
# You can also customize the exit_status of each check.
|
||||||
|
# If you don't want TODO comments to cause `mix credo` to fail, just
|
||||||
|
# set this value to 0 (zero).
|
||||||
|
#
|
||||||
|
{Credo.Check.Design.TagTODO, [exit_status: 2]},
|
||||||
|
{Credo.Check.Design.TagFIXME, []},
|
||||||
|
|
||||||
|
#
|
||||||
|
## Readability Checks
|
||||||
|
#
|
||||||
|
{Credo.Check.Readability.AliasOrder, []},
|
||||||
|
{Credo.Check.Readability.FunctionNames, []},
|
||||||
|
{Credo.Check.Readability.LargeNumbers, []},
|
||||||
|
{Credo.Check.Readability.MaxLineLength, [priority: :low, max_length: 120]},
|
||||||
|
{Credo.Check.Readability.ModuleAttributeNames, []},
|
||||||
|
{Credo.Check.Readability.ModuleDoc, []},
|
||||||
|
{Credo.Check.Readability.ModuleNames, []},
|
||||||
|
{Credo.Check.Readability.ParenthesesInCondition, []},
|
||||||
|
{Credo.Check.Readability.ParenthesesOnZeroArityDefs, []},
|
||||||
|
{Credo.Check.Readability.PipeIntoAnonymousFunctions, []},
|
||||||
|
{Credo.Check.Readability.PredicateFunctionNames, []},
|
||||||
|
{Credo.Check.Readability.PreferImplicitTry, []},
|
||||||
|
{Credo.Check.Readability.RedundantBlankLines, []},
|
||||||
|
{Credo.Check.Readability.Semicolons, []},
|
||||||
|
{Credo.Check.Readability.SpaceAfterCommas, []},
|
||||||
|
{Credo.Check.Readability.StringSigils, []},
|
||||||
|
{Credo.Check.Readability.TrailingBlankLine, []},
|
||||||
|
{Credo.Check.Readability.TrailingWhiteSpace, []},
|
||||||
|
{Credo.Check.Readability.UnnecessaryAliasExpansion, []},
|
||||||
|
{Credo.Check.Readability.VariableNames, []},
|
||||||
|
{Credo.Check.Readability.WithSingleClause, []},
|
||||||
|
|
||||||
|
#
|
||||||
|
## Refactoring Opportunities
|
||||||
|
#
|
||||||
|
{Credo.Check.Refactor.Apply, []},
|
||||||
|
{Credo.Check.Refactor.CondStatements, []},
|
||||||
|
{Credo.Check.Refactor.CyclomaticComplexity, []},
|
||||||
|
{Credo.Check.Refactor.FunctionArity, []},
|
||||||
|
{Credo.Check.Refactor.LongQuoteBlocks, []},
|
||||||
|
{Credo.Check.Refactor.MatchInCondition, []},
|
||||||
|
{Credo.Check.Refactor.MapJoin, []},
|
||||||
|
{Credo.Check.Refactor.NegatedConditionsInUnless, []},
|
||||||
|
{Credo.Check.Refactor.NegatedConditionsWithElse, []},
|
||||||
|
{Credo.Check.Refactor.Nesting, []},
|
||||||
|
{Credo.Check.Refactor.UnlessWithElse, []},
|
||||||
|
{Credo.Check.Refactor.WithClauses, []},
|
||||||
|
{Credo.Check.Refactor.FilterFilter, []},
|
||||||
|
{Credo.Check.Refactor.RejectReject, []},
|
||||||
|
{Credo.Check.Refactor.RedundantWithClauseResult, []},
|
||||||
|
|
||||||
|
#
|
||||||
|
## Warnings
|
||||||
|
#
|
||||||
|
{Credo.Check.Warning.ApplicationConfigInModuleAttribute, []},
|
||||||
|
{Credo.Check.Warning.BoolOperationOnSameValues, []},
|
||||||
|
{Credo.Check.Warning.ExpensiveEmptyEnumCheck, []},
|
||||||
|
{Credo.Check.Warning.IExPry, []},
|
||||||
|
{Credo.Check.Warning.IoInspect, []},
|
||||||
|
{Credo.Check.Warning.OperationOnSameValues, []},
|
||||||
|
{Credo.Check.Warning.OperationWithConstantResult, []},
|
||||||
|
{Credo.Check.Warning.RaiseInsideRescue, []},
|
||||||
|
{Credo.Check.Warning.SpecWithStruct, []},
|
||||||
|
{Credo.Check.Warning.WrongTestFileExtension, []},
|
||||||
|
{Credo.Check.Warning.UnusedEnumOperation, []},
|
||||||
|
{Credo.Check.Warning.UnusedFileOperation, []},
|
||||||
|
{Credo.Check.Warning.UnusedKeywordOperation, []},
|
||||||
|
{Credo.Check.Warning.UnusedListOperation, []},
|
||||||
|
{Credo.Check.Warning.UnusedPathOperation, []},
|
||||||
|
{Credo.Check.Warning.UnusedRegexOperation, []},
|
||||||
|
{Credo.Check.Warning.UnusedStringOperation, []},
|
||||||
|
{Credo.Check.Warning.UnusedTupleOperation, []},
|
||||||
|
{Credo.Check.Warning.UnsafeExec, []}
|
||||||
|
],
|
||||||
|
disabled: [
|
||||||
|
#
|
||||||
|
# Checks scheduled for next check update (opt-in for now, just replace `false` with `[]`)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Controversial and experimental checks (opt-in, just move the check to `:enabled`
|
||||||
|
# and be sure to use `mix credo --strict` to see low priority checks)
|
||||||
|
#
|
||||||
|
{Credo.Check.Consistency.MultiAliasImportRequireUse, []},
|
||||||
|
{Credo.Check.Consistency.UnusedVariableNames, []},
|
||||||
|
{Credo.Check.Design.DuplicatedCode, []},
|
||||||
|
{Credo.Check.Design.SkipTestWithoutComment, []},
|
||||||
|
{Credo.Check.Readability.AliasAs, []},
|
||||||
|
{Credo.Check.Readability.BlockPipe, []},
|
||||||
|
{Credo.Check.Readability.ImplTrue, []},
|
||||||
|
{Credo.Check.Readability.MultiAlias, []},
|
||||||
|
{Credo.Check.Readability.NestedFunctionCalls, []},
|
||||||
|
{Credo.Check.Readability.SeparateAliasRequire, []},
|
||||||
|
{Credo.Check.Readability.SingleFunctionToBlockPipe, []},
|
||||||
|
{Credo.Check.Readability.SinglePipe, []},
|
||||||
|
{Credo.Check.Readability.Specs, []},
|
||||||
|
{Credo.Check.Readability.StrictModuleLayout, []},
|
||||||
|
{Credo.Check.Readability.WithCustomTaggedTuple, []},
|
||||||
|
{Credo.Check.Refactor.ABCSize, []},
|
||||||
|
{Credo.Check.Refactor.AppendSingleItem, []},
|
||||||
|
{Credo.Check.Refactor.DoubleBooleanNegation, []},
|
||||||
|
{Credo.Check.Refactor.FilterReject, []},
|
||||||
|
{Credo.Check.Refactor.IoPuts, []},
|
||||||
|
{Credo.Check.Refactor.MapMap, []},
|
||||||
|
{Credo.Check.Refactor.ModuleDependencies, []},
|
||||||
|
{Credo.Check.Refactor.NegatedIsNil, []},
|
||||||
|
{Credo.Check.Refactor.PipeChainStart, []},
|
||||||
|
{Credo.Check.Refactor.RejectFilter, []},
|
||||||
|
{Credo.Check.Refactor.VariableRebinding, []},
|
||||||
|
{Credo.Check.Warning.LazyLogging, []},
|
||||||
|
{Credo.Check.Warning.LeakyEnvironment, []},
|
||||||
|
{Credo.Check.Warning.MapGetUnsafePass, []},
|
||||||
|
{Credo.Check.Warning.MixEnv, []},
|
||||||
|
{Credo.Check.Warning.UnsafeToAtom, []}
|
||||||
|
|
||||||
|
# {Credo.Check.Refactor.MapInto, []},
|
||||||
|
|
||||||
|
#
|
||||||
|
# Custom checks can be created using `mix credo.gen.check`.
|
||||||
|
#
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -28,7 +28,7 @@ defmodule Aprs.Application do
|
||||||
]
|
]
|
||||||
|
|
||||||
children =
|
children =
|
||||||
if Application.get_env(:aprs, :env) in [:prod, :dev] do
|
if Mix.env() in [:prod, :dev] do
|
||||||
children ++ [Aprs.Is.IsSupervisor]
|
children ++ [Aprs.Is.IsSupervisor]
|
||||||
else
|
else
|
||||||
children
|
children
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ defmodule Aprs.Is do
|
||||||
# Get startup parameters
|
# Get startup parameters
|
||||||
server = Application.get_env(:aprs, :aprs_is_server, 'rotate.aprs2.net')
|
server = Application.get_env(:aprs, :aprs_is_server, 'rotate.aprs2.net')
|
||||||
port = Application.get_env(:aprs, :aprs_is_port, 14580)
|
port = Application.get_env(:aprs, :aprs_is_port, 14580)
|
||||||
default_filter = Application.get_env(:aprs, :aprs_is_default_filter, "r/47.6/-122.3/100")
|
default_filter = Application.get_env(:aprs, :aprs_is_default_filter, "r/33/-96/100")
|
||||||
aprs_user_id = Application.get_env(:aprs, :aprs_is_login_id, "w5isp")
|
aprs_user_id = Application.get_env(:aprs, :aprs_is_login_id, "w5isp")
|
||||||
aprs_passcode = Application.get_env(:aprs, :aprs_is_password, "-1")
|
aprs_passcode = Application.get_env(:aprs, :aprs_is_password, "-1")
|
||||||
|
|
||||||
|
|
@ -78,7 +78,7 @@ defmodule Aprs.Is do
|
||||||
# Server methods
|
# Server methods
|
||||||
|
|
||||||
defp connect_to_aprs_is(server, port) do
|
defp connect_to_aprs_is(server, port) do
|
||||||
Logger.debug("Connecting to #{server}:#{port}")
|
Logger.debug("Connecting to: #{server}:#{port}")
|
||||||
opts = [:binary, active: true]
|
opts = [:binary, active: true]
|
||||||
:gen_tcp.connect(String.to_charlist(server), port, opts)
|
:gen_tcp.connect(String.to_charlist(server), port, opts)
|
||||||
end
|
end
|
||||||
|
|
@ -87,6 +87,8 @@ defmodule Aprs.Is do
|
||||||
login_string =
|
login_string =
|
||||||
"user #{aprs_user_id} pass #{aprs_passcode} vers aprs.me 0.1 filter #{filter} \n"
|
"user #{aprs_user_id} pass #{aprs_passcode} vers aprs.me 0.1 filter #{filter} \n"
|
||||||
|
|
||||||
|
Logger.debug("Sending login string: #{login_string}")
|
||||||
|
|
||||||
:gen_tcp.send(socket, login_string)
|
:gen_tcp.send(socket, login_string)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -116,7 +118,6 @@ defmodule Aprs.Is do
|
||||||
Process.cancel_timer(state.timer)
|
Process.cancel_timer(state.timer)
|
||||||
|
|
||||||
# Handle the incoming message
|
# Handle the incoming message
|
||||||
# TODO: Spawn a process/genserver to handle the ETS functionality
|
|
||||||
# Task.start(Aprs, :dispatch, [packet])
|
# Task.start(Aprs, :dispatch, [packet])
|
||||||
|
|
||||||
if String.contains?(packet, "\n") or String.contains?(packet, "\r") do
|
if String.contains?(packet, "\n") or String.contains?(packet, "\r") do
|
||||||
|
|
@ -125,7 +126,7 @@ defmodule Aprs.Is do
|
||||||
|> Enum.each(&dispatch(String.trim(&1)))
|
|> Enum.each(&dispatch(String.trim(&1)))
|
||||||
end
|
end
|
||||||
|
|
||||||
# dispatch(packet)
|
dispatch(packet)
|
||||||
|
|
||||||
# Start a new timer
|
# Start a new timer
|
||||||
timer = Process.send_after(self(), :aprs_no_message_timeout, @aprs_timeout)
|
timer = Process.send_after(self(), :aprs_no_message_timeout, @aprs_timeout)
|
||||||
|
|
@ -159,8 +160,8 @@ defmodule Aprs.Is do
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec dispatch(binary) :: nil | :ok
|
@spec dispatch(binary) :: nil | :ok
|
||||||
def dispatch("#" <> _comment_text) do
|
def dispatch("#" <> comment_text) do
|
||||||
# Logger.debug("COMMENT: " <> String.trim(comment_text))
|
Logger.debug("COMMENT: " <> String.trim(comment_text))
|
||||||
end
|
end
|
||||||
|
|
||||||
def dispatch(""), do: nil
|
def dispatch(""), do: nil
|
||||||
|
|
@ -168,6 +169,7 @@ defmodule Aprs.Is do
|
||||||
def dispatch(message) do
|
def dispatch(message) do
|
||||||
case Parser.parse(message) do
|
case Parser.parse(message) do
|
||||||
{:ok, parsed_message} ->
|
{:ok, parsed_message} ->
|
||||||
|
# IO.inspect(parsed_message)
|
||||||
# time_message_received =
|
# time_message_received =
|
||||||
# :calendar.universal_time() |> :calendar.datetime_to_gregorian_seconds()
|
# :calendar.universal_time() |> :calendar.datetime_to_gregorian_seconds()
|
||||||
|
|
||||||
|
|
@ -207,10 +209,8 @@ defmodule Aprs.Is do
|
||||||
|
|
||||||
# IO.inspect(parsed_message)
|
# IO.inspect(parsed_message)
|
||||||
# Logger.debug("SERVER:" <> message)
|
# Logger.debug("SERVER:" <> message)
|
||||||
{:error, _error} ->
|
{:error, error} ->
|
||||||
nil
|
Logger.debug("PARSE ERROR: " <> error)
|
||||||
|
|
||||||
# Logger.debug("PARSE ERROR: " <> error)
|
|
||||||
|
|
||||||
x ->
|
x ->
|
||||||
Logger.debug("PARSE ERROR: " <> x)
|
Logger.debug("PARSE ERROR: " <> x)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue