asp.net mvc - while sending and receiving telnet stream asynchronously, while loop hangs the telnet emulator -


i working on telnet emulator in web using mvc signalr, while sending , receiving telnet stream asynchronously while loop hangs page if kept long, not finish. tried many solution no luck.

below code stuck while continuously looking stream bytes.

     /// <summary>     /// wait data telnet server , send emulation.     /// </summary>     public async task readloop(string connectionid, basedecoder decoder, cancellationtoken ct, string panelid)     {         var client = get(connectionid);         if (client == null) { return; }         string script = string.empty;         if (string.isnullorwhitespace(panelscript))         {             panelscript = objaccn.executequerypanelscript(convert.toint32(panelid)).tostring();             script = panelscript.replace(@"\n", environment.newline);             commands = regex.split(script, "\r\n");         }          string loginprompt = null;         if (panelid != "1")              loginprompt = "login: ";         else             loginprompt = "name?: ";         var login = commands[0];// webconfigurationmanager.appsettings["login"];         if (!_panelcommands.containskey(0))             _panelcommands.add(0, true);         var passwordprompt = webconfigurationmanager.appsettings["passwordprompt"];         var password = commands[1];//webconfigurationmanager.appsettings["password"];         if (!_panelcommands.containskey(1))             _panelcommands.add(1, true);         var loginauto = (!string.isnullorempty(loginprompt) && !string.isnullorempty(login));         var passwordauto = (!string.isnullorempty(passwordprompt) && !string.isnullorempty(password));         var defaultcommandsform60 = false;         var defaultcommandsform50 = false;         var defaultscreenm50 = false;         decoder.scriptfunc = async (string str) =>             {                 if (!string.isnullorempty(str))                 {                     if (loginauto && str.endswith(loginprompt, stringcomparison.ordinal))                     {                         await client.streamwriter.writeasync(login + "\r\n");                         loginauto = false;                         str = str.remove(str.length - loginprompt.length);                     }                     if (passwordauto && str.endswith(passwordprompt, stringcomparison.ordinal))                     {                         await client.streamwriter.writeasync(password + "\r\n");                         passwordauto = false;                         str = str.remove(str.length - passwordprompt.length);                         if (panelid != "1")                             defaultcommandsform60 = true;                         else                             defaultcommandsform50 = true;                         //system.threading.thread.sleep(1500);                     }                     if (panelid != "1")                     {                         if (defaultcommandsform60)                         {                             system.threading.thread.sleep(1500);                             await client.streamwriter.writeasync(commands[2] + "\r\n");                             if (commands.length > 2)                             {                                 system.threading.thread.sleep(1500);                                 await client.streamwriter.writeasync(commands[3] + "\r\n");                             }                             if (commands.length > 3)                             {                                 system.threading.thread.sleep(1500);                                 await client.streamwriter.writeasync(commands[4] + "\r\n");                             }                             defaultcommandsform60 = false;                         }                     }                     else                     {                          if (defaultcommandsform50)                         {                             if (commands.length > 1)                             {                                 //  system.threading.thread.sleep(2500);                                 if (!_panelcommands.containskey(3))                                 {                                     // system.threading.thread.sleep(1500);                                     await client.streamwriter.writeasync(commands[3] + "\r\n");                                     _panelcommands.add(3, true);                                 }                                 else                                 {                                     if (commands.length > 2)                                     {                                         if (!_panelcommands.containskey(4))                                         {                                             // system.threading.thread.sleep(1500);                                             await client.streamwriter.writeasync(commands[3] + "\r\n");                                             _panelcommands.add(4, true);                                         }                                         defaultcommandsform50 = false;                                     }                                 }                                 defaultscreenm50 = true;                             }                         }                         else                         {                             if (defaultscreenm50)                                 if (str.endswith("$ "))                                 {                                     await client.streamwriter.writeasync("screen" + "\r\n");                                     str = str.remove(str.length - ("$ ").length);                                     defaultscreenm50 = false;                                 }                         }                      }                 }                 return str;             };          const int buffersize = 4096;         //if (ns.canread)         //{         //    byte[] readbuffer = new byte[1024];         //    int numbytesread = 0;         //            //    {         //        numbytesread = ns.read(readbuffer, 0, readbuffer.length);         //        //var data = encoding.utf8.getstring(readbuffer);         //        // ss= encoding.getencoding(1252).getstring(readbuffer.toarray());         //        //sb.append(readbuffer[0].tostring);         //        sb.appendformat("{0}", encoding.ascii.getstring(readbuffer, 0, numbytesread));         //        sb.replace(convert.tochar(24), ' ');         //        sb.replace(convert.tochar(255), ' ');         //        sb.replace('?', ' ');         //        //sb.replace(environment.newline, "<br />").tostring();         //    }         //    while (ns.dataavailable);         //}         //if (client._stream.canread)         //{         //            //    {         //        var inbytes = await client.readasync(buffersize, ct);         //        foreach (var b in inbytes)         //        {         //            await decoder.addbyte(b);         //        }         //        await decoder.flush();         //    } while (client.isconnected );         ////}         //disconnect(connectionid);  //var  readtask = client.readasync(buffersize, ct);         while (client.isconnected && !ct.iscancellationrequested)         {             if (client._stream.canread)             {                 var inbytes = await client.readasync(buffersize, ct);                 foreach (var b in inbytes)                 {                     await decoder.addbyte(b);                 }                  await decoder.flush();             }         }         disconnect(connectionid);     } }  

in above method here part of code stuck , never comes end.

while (client.isconnected && !ct.iscancellationrequested)         {             if (client._stream.canread)             {                 var inbytes = await client.readasync(buffersize, ct);                 foreach (var b in inbytes)                 {                     await decoder.addbyte(b);                 }                  await decoder.flush();             }         }         disconnect(connectionid); 

any suggestion , appreciable!


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -