Skip to content

Instantly share code, notes, and snippets.

@CharlesOkwuagwu
Created February 28, 2016 17:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save CharlesOkwuagwu/14a204edb867ef82ed9d to your computer and use it in GitHub Desktop.
Save CharlesOkwuagwu/14a204edb867ef82ed9d to your computer and use it in GitHub Desktop.
too many warnings
defp send_messages(msg_list, s, do_timer_reset) do
if do_timer_reset do
if s.acks != [] do
ids = s.acks
s = %{s | acks: []}
log "adding acks: #{inspect ids}"
msg_list = msg_list ++ [{TL.msgs_ack(ids), false}]
end
# if s.resends != [] do
# ids = s.resends
# s = %{s | resends: []}
# log "adding resends: #{inspect ids}"
# msg_list = msg_list ++ [{TL.msg_resend_req(ids), false}]
# end
:timer.cancel(s.ack_timer)
end
if length(msg_list) > 1 do
{content_count, prev_msg_id, msg} = pack_messages(msg_list, 0, "", s.content_count, s.prev_msg_id)
send_enc(seq_no(content_count, false), message_id(prev_msg_id + 8), content_count, msg, s)
else
{msg, is_content} = hd(msg_list)
if is_content == true do
send_enc(seq_no(s.content_count, true), message_id(s.prev_msg_id + 8), s.content_count + 1, msg, s)
else
send_enc(seq_no(s.content_count, false), message_id(s.prev_msg_id + 8), s.content_count, msg, s)
end
end
end
@josevalim
Copy link

defmodule Foo do
  defp send_messages(msg_list, s, do_timer_reset) do
    {s, msg_list} =
      if do_timer_reset && s.acks != [] do
        ids = s.acks
        s = %{s | acks: []}
        log "adding acks: #{inspect ids}"
        {s, msg_list ++ [{TL.msgs_ack(ids), false}]}
      else
        {s, msg_list}
      end

    if do_timer_reset do
      :timer.cancel(s.ack_timer)
    end

    if length(msg_list) > 1 do
      {content_count, prev_msg_id, msg} = pack_messages(msg_list, 0, "", s.content_count, s.prev_msg_id)

      send_enc(seq_no(content_count, false), message_id(prev_msg_id + 8), content_count, msg, s)
    else
      {msg, is_content} = hd(msg_list)

      if is_content == true do
        send_enc(seq_no(s.content_count, true), message_id(s.prev_msg_id + 8), s.content_count + 1, msg, s)
      else
        send_enc(seq_no(s.content_count, false), message_id(s.prev_msg_id + 8), s.content_count, msg, s)
      end
    end
  end
end

@danhper
Copy link

danhper commented Feb 28, 2016

Just use functions and pattern matching, it'll be cleaner.

defp send_messages(msg_list, s, do_timer_reset) do
  if do_timer_reset do
    {s, msg_list} = transform_acks(s)
    if s.acks != [] do
    end

    # if s.resends != [] do
    #   ids = s.resends
    #   s = %{s | resends: []}
    #   log "adding resends: #{inspect ids}"
    #   msg_list = msg_list ++ [{TL.msg_resend_req(ids), false}]
    # end

    :timer.cancel(s.ack_timer)
  end

  process_messages(msg_list)
end

defp transform_acks(%{acks: []} = s), do: {s, []}
defp transform_acks(%{acks: acks} = s) do
  ids = s.acks
  s = %{s | acks: []}
  log "adding acks: #{inspect ids}"
  {s, msg_list ++ [{TL.msgs_ack(ids), false}]}
end

defp process_messages([{msg, is_content}]) do
  if is_content do
    send_enc(seq_no(s.content_count, true), message_id(s.prev_msg_id + 8), s.content_count + 1, msg, s)
  else
    send_enc(seq_no(s.content_count, false), message_id(s.prev_msg_id + 8), s.content_count, msg, s)
  end
end

defp process_messages(msg_list) do
  {content_count, prev_msg_id, msg} = pack_messages(msg_list, 0, "", s.content_count, s.prev_msg_id)

  send_enc(seq_no(content_count, false), message_id(prev_msg_id + 8), content_count, msg, s)
end

@CharlesOkwuagwu
Copy link
Author

No more warnings, and I guess it's a bit cleaner :)

  defp send_messages(msg_list, s, true) do
    {s, msg_list} =
      if s.acks != [] do
        log "adding acks: #{inspect s.acks}"
        {%{s | acks: []}, msg_list ++ [{TL.msgs_ack(s.acks), false}]}
      else
        {s, msg_list}
      end

      # if s.resends != [] do
      #   ids = s.resends
      #   s = %{s | resends: []}
      #   log "adding resends: #{inspect ids}"
      #   msg_list = msg_list ++ [{TL.msg_resend_req(ids), false}]
      # end

    :timer.cancel(s.ack_timer)

    send_messages(msg_list, s, false)
  end
  defp send_messages([{msg, true}], s, false) do
    send_enc(seq_no(s.content_count, true), message_id(s.prev_msg_id + 8), s.content_count + 1, msg, s)
  end
  defp send_messages([{msg, false}], s, false) do
    send_enc(seq_no(s.content_count, false), message_id(s.prev_msg_id + 8), s.content_count, msg, s)
  end
  defp send_messages(msg_list, s, false) do
    {content_count, prev_msg_id, msg} = pack_messages(msg_list, 0, "", s.content_count, s.prev_msg_id)
    send_enc(seq_no(content_count, false), message_id(prev_msg_id + 8), content_count, msg, s)
  end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment