66using System . Text ;
77using System . Threading ;
88using System . Threading . Tasks ;
9- using System . Windows . Forms ;
9+ using DeepBotPointFucker . Models ;
1010using Newtonsoft . Json ;
1111
1212namespace DeepBotPointFucker
@@ -45,7 +45,7 @@ public async Task<bool> Connect(string apiKey)
4545
4646 Log ( $ "Sending command `{ command } `.") ;
4747
48- await SendMessage ( command ) ;
48+ await SendCommand ( command ) ;
4949 }
5050 catch
5151 {
@@ -56,11 +56,11 @@ public async Task<bool> Connect(string apiKey)
5656
5757 try
5858 {
59- var registerResult = await ReceiveMessage ( ) ;
59+ var registerResult = await ReceiveMessage < RegisterResult > ( ) ;
6060
6161 Log ( "Response received." ) ;
6262
63- if ( registerResult ? . Message == "success" )
63+ if ( registerResult ? . Message == "success" )
6464 {
6565 Log ( "Registering with DeepBot's API was successful." ) ;
6666
@@ -77,55 +77,58 @@ public async Task<bool> Connect(string apiKey)
7777 return false ;
7878 }
7979
80- public async Task < List < UserResult > > Download ( )
80+ public async Task < List < User > > Download ( )
8181 {
82- var allUsers = new List < UserResult > ( ) ;
82+ Log ( "Beginning download." ) ;
83+ var allUsers = new List < User > ( ) ;
8384 var currentOffset = 0 ;
8485 const int limit = 100 ;
8586
86- var command = $ "api|get_users|{ currentOffset } |{ limit } ";
87-
88- List < UserResult > users ;
8987 do
9088 {
91- users = await GetUsers ( command ) ;
89+ string command = $ "api|get_users|{ currentOffset } |{ limit } ";
90+
91+ var users = await GetUsers ( command ) ;
9292
9393 allUsers . AddRange ( users ) ;
9494
9595 currentOffset += users . Count ;
96- } while ( users . Any ( ) ) ;
96+ } while ( currentOffset % limit == 0 ) ;
9797
98+ Log ( "Finished download." ) ;
9899 return allUsers ;
99100 }
100101
101- private async Task < List < UserResult > > GetUsers ( string command )
102+ private async Task < List < User > > GetUsers ( string command )
102103 {
103104 try
104105 {
105106 Log ( $ "Sending command `{ command } `.") ;
106107
107- await SendMessage ( command ) ;
108+ await SendCommand ( command ) ;
108109 }
109110 catch
110111 {
111112 Log ( "Command failed." ) ;
112113
113- return new List < UserResult > ( ) ;
114+ return new List < User > ( ) ;
114115 }
115116
116117 try
117118 {
118- var result = await ReceiveMessage ( ) ;
119+ var result = await ReceiveMessage < UserResult > ( ) ;
119120
120121 Log ( "Response received." ) ;
121122
122- return JsonConvert . DeserializeObject < List < UserResult > > ( result . Message ) ;
123+ return result . Message ;
123124 }
124- catch
125+ catch ( Exception e )
125126 {
127+ Log ( e . Message ) ;
128+
126129 Log ( "There was an error receiving the response." ) ;
127130
128- return new List < UserResult > ( ) ;
131+ return new List < User > ( ) ;
129132 }
130133 }
131134
@@ -134,22 +137,15 @@ private void Log(string message)
134137 Console . WriteLine ( message ) ;
135138 }
136139
137- private async Task SendMessage ( string message )
140+ private async Task SendCommand ( string command )
138141 {
139- using ( var memoryStream = new MemoryStream ( ) )
140- {
141- using ( var writer = new StreamWriter ( memoryStream , Encoding . UTF8 ) )
142- {
143- await writer . WriteLineAsync ( message ) ;
144- }
145-
146- var arraySegment = new ArraySegment < byte > ( memoryStream . ToArray ( ) ) ;
142+ var buffer = Encoding . UTF8 . GetBytes ( command ) ;
143+ var arraySegment = new ArraySegment < byte > ( buffer ) ;
147144
148- await _socket . SendAsync ( arraySegment , WebSocketMessageType . Text , true , CancellationToken . None ) ;
149- }
145+ await _socket . SendAsync ( arraySegment , WebSocketMessageType . Text , true , CancellationToken . None ) ;
150146 }
151147
152- private async Task < CommandResult > ReceiveMessage ( )
148+ private async Task < T > ReceiveMessage < T > ( )
153149 {
154150 using ( var memoryStream = new MemoryStream ( ) )
155151 {
@@ -165,32 +161,39 @@ private async Task<CommandResult> ReceiveMessage()
165161
166162 if ( result . MessageType != WebSocketMessageType . Text )
167163 {
168- return null ;
164+ return default ( T ) ;
169165 }
170166
171167 using ( var reader = new StreamReader ( memoryStream , Encoding . UTF8 ) )
172168 {
173169 var message = await reader . ReadToEndAsync ( ) ;
174170
175- return JsonConvert . DeserializeObject < CommandResult > ( message ) ;
171+ return JsonConvert . DeserializeObject < T > ( message ) ;
176172 }
177173 }
178174 }
179175
180- public void WriteResultsToFile ( List < UserResult > results )
176+ public void WriteResultsToFile ( List < User > results )
181177 {
182- var ofd = new OpenFileDialog ( ) ;
183- if ( ofd . ShowDialog ( ) != DialogResult . OK )
184- {
185- return ;
186- }
187-
178+ Log ( "Beginning writing results to file." ) ;
179+
188180 var stringBuilder = new StringBuilder ( ) ;
189181 stringBuilder . AppendLine ( "User,Points" ) ;
190182
191- var text = results . Aggregate ( stringBuilder , ( builder , result ) => builder . AppendLine ( $ "{ result . User } ,{ result . Points } ") , builder => builder . ToString ( ) ) ;
183+ var text = results . Where ( x => x . Points > 100 )
184+ . OrderByDescending ( x => x . Points )
185+ . Aggregate ( stringBuilder , ( builder , result ) => builder . AppendLine ( $ "{ result . Name } ,{ result . Points } ") , builder => builder . ToString ( ) ) ;
186+
187+ var filePath = Path . Combine ( AppDomain . CurrentDomain . BaseDirectory , "results.txt" ) ;
188+
189+ if ( ! File . Exists ( filePath ) )
190+ {
191+ File . Create ( filePath ) ;
192+ }
193+
194+ File . WriteAllText ( filePath , text ) ;
192195
193- File . WriteAllText ( ofd . FileName , text ) ;
196+ Log ( "Completed writing results to file." ) ;
194197 }
195198 }
196199}
0 commit comments