/// <summary> /// Receives state and server's transfered bytes and appends UTF8 conversion to warden's message variable /// </summary> /// <param name="ARSTATE"></param> public static void receiveMessage(IAsyncResult ARSTATE) { try { NetworkWarden warden = (NetworkWarden)ARSTATE.AsyncState; int numBytes = warden.socket.EndReceive(ARSTATE); if (numBytes > 0) { string newMessage = Encoding.UTF8.GetString(warden.buffer, 0, numBytes); newMessage = newMessage.Trim(); newMessage = newMessage.TrimEnd(); //string[] lines = ss.sb.ToString().Split(new string[] {"\n"}, StringSPlitOptions.None); //warden.message.Clear(); //warden.message.Append(newMessage); Console.WriteLine("Server said: " + newMessage); } warden.callNext(warden); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Receive callback failed. Error occured: " + e); return; } }
/// <summary> /// This function "assists" the Send function. If all the data has been sent, end sending procedure. /// </summary> static void StopSend(IAsyncResult ARSTATE) { NetworkWarden warden = (NetworkWarden)ARSTATE.AsyncState; warden.socket.EndSend(ARSTATE); //Console.WriteLine("warden callnext: " + (warden.callNext.Method.Name)); warden.callNext(warden); }
/// <summary> /// If connection with server successful, complete connection. /// Begin listening for server data. /// </summary> /// <param name="ARSTATE"></param> static private void handleSuccessfulConnection(IAsyncResult ARSTATE) { NetworkWarden warden = (NetworkWarden)ARSTATE.AsyncState; try { //stops the attempt to connect routine warden.socket.EndConnect(ARSTATE); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Unable to connect to server. Error occured: " + e); return; } //begin receiving data. warden.callNext(warden); warden.socket.BeginReceive(warden.buffer, 0, warden.buffer.Length, SocketFlags.None, receiveMessage, warden); }