forked from jupjohn/MiniTwitch
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
78 changed files
with
5,755 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,249 @@ | ||
# Remove the line below if you want to inherit .editorconfig settings from higher directories | ||
root = true | ||
|
||
# C# files | ||
[*.cs] | ||
|
||
#### Core EditorConfig Options #### | ||
|
||
# Indentation and spacing | ||
indent_size = 4 | ||
indent_style = space | ||
tab_width = 4 | ||
|
||
# New line preferences | ||
end_of_line = crlf | ||
insert_final_newline = false | ||
|
||
#### .NET Coding Conventions #### | ||
|
||
# Organize usings | ||
dotnet_separate_import_directive_groups = false | ||
dotnet_sort_system_directives_first = true | ||
file_header_template = unset | ||
|
||
# this. and Me. preferences | ||
dotnet_style_qualification_for_event = false | ||
dotnet_style_qualification_for_field = false | ||
dotnet_style_qualification_for_method = false | ||
dotnet_style_qualification_for_property = true | ||
|
||
# Language keywords vs BCL types preferences | ||
dotnet_style_predefined_type_for_locals_parameters_members = true | ||
dotnet_style_predefined_type_for_member_access = true | ||
|
||
# Parentheses preferences | ||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning | ||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning | ||
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion | ||
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning | ||
|
||
# Modifier preferences | ||
dotnet_style_require_accessibility_modifiers = for_non_interface_members | ||
|
||
# Expression-level preferences | ||
dotnet_style_coalesce_expression = true:warning | ||
dotnet_style_collection_initializer = true | ||
dotnet_style_explicit_tuple_names = true:warning | ||
dotnet_style_namespace_match_folder = true | ||
dotnet_style_null_propagation = true | ||
dotnet_style_object_initializer = true | ||
dotnet_style_operator_placement_when_wrapping = beginning_of_line | ||
dotnet_style_prefer_auto_properties = true | ||
dotnet_style_prefer_compound_assignment = true | ||
dotnet_style_prefer_conditional_expression_over_assignment = true | ||
dotnet_style_prefer_conditional_expression_over_return = false | ||
dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed | ||
dotnet_style_prefer_inferred_anonymous_type_member_names = true | ||
dotnet_style_prefer_inferred_tuple_names = true | ||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning | ||
dotnet_style_prefer_simplified_boolean_expressions = true:warning | ||
dotnet_style_prefer_simplified_interpolation = true | ||
|
||
# Field preferences | ||
dotnet_style_readonly_field = true:silent | ||
|
||
# Parameter preferences | ||
dotnet_code_quality_unused_parameters = non_public:silent | ||
|
||
# Suppression preferences | ||
dotnet_remove_unnecessary_suppression_exclusions = none | ||
|
||
# New line preferences | ||
dotnet_style_allow_multiple_blank_lines_experimental = true | ||
dotnet_style_allow_statement_immediately_after_block_experimental = true | ||
|
||
#### C# Coding Conventions #### | ||
|
||
# var preferences | ||
csharp_style_var_elsewhere = false | ||
csharp_style_var_for_built_in_types = false | ||
csharp_style_var_when_type_is_apparent = true | ||
|
||
# Expression-bodied members | ||
csharp_style_expression_bodied_accessors = true | ||
csharp_style_expression_bodied_constructors = false | ||
csharp_style_expression_bodied_indexers = true | ||
csharp_style_expression_bodied_lambdas = true | ||
csharp_style_expression_bodied_local_functions = when_on_single_line | ||
csharp_style_expression_bodied_methods = when_on_single_line | ||
csharp_style_expression_bodied_operators = when_on_single_line | ||
csharp_style_expression_bodied_properties = when_on_single_line | ||
|
||
# Pattern matching preferences | ||
csharp_style_pattern_matching_over_as_with_null_check = true | ||
csharp_style_pattern_matching_over_is_with_cast_check = true:silent | ||
csharp_style_prefer_extended_property_pattern = true | ||
csharp_style_prefer_not_pattern = true:warning | ||
csharp_style_prefer_pattern_matching = true:suggestion | ||
csharp_style_prefer_switch_expression = true | ||
|
||
# Null-checking preferences | ||
csharp_style_conditional_delegate_call = true:warning | ||
|
||
# Modifier preferences | ||
csharp_prefer_static_local_function = true:silent | ||
csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async | ||
csharp_style_prefer_readonly_struct = true:silent | ||
|
||
# Code-block preferences | ||
csharp_prefer_braces = when_multiline | ||
csharp_prefer_simple_using_statement = true | ||
csharp_style_namespace_declarations = file_scoped:warning | ||
csharp_style_prefer_method_group_conversion = true | ||
csharp_style_prefer_top_level_statements = false | ||
|
||
# Expression-level preferences | ||
csharp_prefer_simple_default_expression = true | ||
csharp_style_deconstructed_variable_declaration = true:warning | ||
csharp_style_implicit_object_creation_when_type_is_apparent = true | ||
csharp_style_inlined_variable_declaration = true | ||
csharp_style_prefer_index_operator = true:silent | ||
csharp_style_prefer_local_over_anonymous_function = true | ||
csharp_style_prefer_null_check_over_type_check = true:warning | ||
csharp_style_prefer_range_operator = true | ||
csharp_style_prefer_tuple_swap = true | ||
csharp_style_prefer_utf8_string_literals = true | ||
csharp_style_throw_expression = true:silent | ||
csharp_style_unused_value_assignment_preference = discard_variable:warning | ||
csharp_style_unused_value_expression_statement_preference = discard_variable:warning | ||
|
||
# 'using' directive preferences | ||
csharp_using_directive_placement = outside_namespace:warning | ||
|
||
# New line preferences | ||
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false | ||
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false | ||
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false | ||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false | ||
csharp_style_allow_embedded_statements_on_same_line_experimental = false | ||
|
||
#### C# Formatting Rules #### | ||
|
||
# New line preferences | ||
csharp_new_line_before_catch = true | ||
csharp_new_line_before_else = true | ||
csharp_new_line_before_finally = true | ||
csharp_new_line_before_members_in_anonymous_types = false | ||
csharp_new_line_before_members_in_object_initializers = false | ||
csharp_new_line_before_open_brace = all | ||
csharp_new_line_between_query_expression_clauses = true | ||
|
||
# Indentation preferences | ||
csharp_indent_block_contents = true | ||
csharp_indent_braces = false | ||
csharp_indent_case_contents = true | ||
csharp_indent_case_contents_when_block = false | ||
csharp_indent_labels = one_less_than_current | ||
csharp_indent_switch_labels = true | ||
|
||
# Space preferences | ||
csharp_space_after_cast = false | ||
csharp_space_after_colon_in_inheritance_clause = true | ||
csharp_space_after_comma = true | ||
csharp_space_after_dot = false | ||
csharp_space_after_keywords_in_control_flow_statements = true | ||
csharp_space_after_semicolon_in_for_statement = true | ||
csharp_space_around_binary_operators = before_and_after | ||
csharp_space_around_declaration_statements = false | ||
csharp_space_before_colon_in_inheritance_clause = true | ||
csharp_space_before_comma = false | ||
csharp_space_before_dot = false | ||
csharp_space_before_open_square_brackets = false | ||
csharp_space_before_semicolon_in_for_statement = false | ||
csharp_space_between_empty_square_brackets = false | ||
csharp_space_between_method_call_empty_parameter_list_parentheses = false | ||
csharp_space_between_method_call_name_and_opening_parenthesis = false | ||
csharp_space_between_method_call_parameter_list_parentheses = false | ||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false | ||
csharp_space_between_method_declaration_name_and_open_parenthesis = false | ||
csharp_space_between_method_declaration_parameter_list_parentheses = false | ||
csharp_space_between_parentheses = false | ||
csharp_space_between_square_brackets = false | ||
|
||
# Wrapping preferences | ||
csharp_preserve_single_line_blocks = true | ||
csharp_preserve_single_line_statements = false | ||
|
||
#### Naming styles #### | ||
|
||
# Naming rules | ||
|
||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion | ||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface | ||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i | ||
|
||
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types | ||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case | ||
|
||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case | ||
|
||
# Symbol specifications | ||
|
||
dotnet_naming_symbols.interface.applicable_kinds = interface | ||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.interface.required_modifiers = | ||
|
||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum | ||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.types.required_modifiers = | ||
|
||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method | ||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.non_field_members.required_modifiers = | ||
|
||
# Naming styles | ||
|
||
dotnet_naming_style.pascal_case.required_prefix = | ||
dotnet_naming_style.pascal_case.required_suffix = | ||
dotnet_naming_style.pascal_case.word_separator = | ||
dotnet_naming_style.pascal_case.capitalization = pascal_case | ||
|
||
dotnet_naming_style.begins_with_i.required_prefix = I | ||
dotnet_naming_style.begins_with_i.required_suffix = | ||
dotnet_naming_style.begins_with_i.word_separator = | ||
dotnet_naming_style.begins_with_i.capitalization = pascal_case | ||
|
||
# CS0618: Type or member is obsolete | ||
dotnet_diagnostic.CS0618.severity = suggestion | ||
|
||
# S3168: "async" methods should not return "void" | ||
dotnet_diagnostic.S3168.severity = suggestion | ||
|
||
# S1133: Deprecated code should be removed | ||
dotnet_diagnostic.S1133.severity = suggestion | ||
|
||
# S3264: Events should be invoked | ||
dotnet_diagnostic.S3264.severity = none | ||
|
||
# S3925: "ISerializable" should be implemented correctly | ||
dotnet_diagnostic.S3925.severity = none | ||
|
||
# S1075: URIs should not be hardcoded | ||
dotnet_diagnostic.S1075.severity = suggestion | ||
|
||
# S1450: Private fields only used as local variables in methods should become local variables | ||
dotnet_diagnostic.S1450.severity = suggestion |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2023 github.com/Foretack | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
namespace MiniTwitch.Common.Extensions; | ||
public static class SpanExtensions | ||
{ | ||
public static bool SumsTo(this ReadOnlySpan<byte> source, int value) | ||
{ | ||
int sum = 0; | ||
foreach (byte b in source) | ||
{ | ||
sum += b; | ||
} | ||
|
||
return sum == value; | ||
} | ||
public static int Sum(this ReadOnlySpan<byte> source) | ||
{ | ||
int sum = 0; | ||
foreach (byte b in source) | ||
{ | ||
sum += b; | ||
} | ||
|
||
return sum; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
namespace MiniTwitch.Common.Extensions; | ||
public static class TaskExtensions | ||
{ | ||
public static async void StepOver(this ValueTask valueTask, Action<Exception>? @catch = null) | ||
{ | ||
try | ||
{ | ||
await valueTask; | ||
} | ||
catch (Exception ex) when (@catch is not null) | ||
{ | ||
@catch.Invoke(ex); | ||
} | ||
} | ||
public static async void StepOver(this Task task, Action<Exception>? @catch = null) | ||
{ | ||
try | ||
{ | ||
await task; | ||
} | ||
catch (Exception ex) when (@catch is not null) | ||
{ | ||
@catch.Invoke(ex); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
using System.Net.WebSockets; | ||
|
||
namespace MiniTwitch.Common.Internal.Models; | ||
|
||
/// <summary> | ||
/// Helper class for byte buffering | ||
/// </summary> | ||
internal sealed class ByteBucket | ||
{ | ||
// Keep this bad boy big, because it doesn't need to be cleared | ||
private readonly Memory<byte> _bucket = new(new byte[short.MaxValue]); | ||
private readonly Memory<byte> _temp; | ||
private int _filled = 0; | ||
|
||
public ByteBucket(short tempBufferSize = 2048) | ||
{ | ||
_temp = new Memory<byte>(new byte[tempBufferSize]); | ||
} | ||
|
||
/// <summary> | ||
/// Receives bytes from the provided ClientWebSocket source | ||
/// </summary> | ||
/// <returns><see langword="true"/> if the bucket should be drained</returns> | ||
public async ValueTask<bool> FillFrom(ClientWebSocket source, CancellationToken cToken) | ||
{ | ||
// Receive bytes into _temp | ||
// This overwrites previous data | ||
ValueWebSocketReceiveResult result = await source.ReceiveAsync(_temp, cToken); | ||
// Copy the received bytes into the bucket | ||
_temp[..result.Count].CopyTo(_bucket[_filled..(result.Count + _filled)]); | ||
_filled += result.Count; | ||
return result.EndOfMessage; | ||
} | ||
|
||
public ReadOnlyMemory<byte> Drain() | ||
{ | ||
ReadOnlyMemory<byte> result = _bucket[..(_filled - 2)]; | ||
_filled = 0; | ||
return result; | ||
} | ||
} |
Oops, something went wrong.