/// <summary> /// Is called from asynchronous socket if data is recieved. /// </summary> /// <param name="a"></param> private static void OnRecievedData(IAsyncResult a) { Hashtable param = (Hashtable)a.AsyncState; BufferedSocket socket = (BufferedSocket)param["socket"]; object tag = param["tag"]; SocketCallBack callBack = (SocketCallBack)param["callBack"]; SocketActivityCallback activityCallback = (SocketActivityCallback)param["activityCallback"]; byte[] buffer = (byte[])param["recieveBuffer"]; try{ // Call activity call back, if specified if (activityCallback != null) { activityCallback(tag); } // Socket is closed by session, we don't need to get data or call callback method. // This mainlty happens when session timesout and session is ended. if (!socket.IsClosed) { int countReaded = socket.EndReceive(a); if (countReaded > 0) { socket.AppendBuffer(buffer, countReaded); if (param["recieveType"].ToString() == "term") { ProccessData_Term(param); } else { ProccessData_Len(param); } } // Client disconnected else { callBack(SocketCallBackResult.SocketClosed, (long)param["readedCount"], null, tag); } } } catch (Exception x) { callBack(SocketCallBackResult.Exception, (long)param["readedCount"], x, tag); } }
/// <summary> /// Begins asynchronous recieveing. /// </summary> /// <param name="socket">Socket from where to get data.</param> /// <param name="strm">Stream where to store data.</param> /// <param name="maxLength">Maximum length of data which may read.</param> /// <param name="terminator">Terminator string which terminates reading. eg '\r\n'.</param> /// <param name="removeFromEnd">Removes following string at end of data.</param> /// <param name="tag">User data.</param> /// <param name="callBack">Method to call, if receive completes.</param> /// <param name="activityCallback">Method to call, if data block is completed. Data is retrieved as blocks, /// for example data1 data2 ..., activity callback is called foreach data block.</param> public static void BeginRecieve(BufferedSocket socket,MemoryStream strm,long maxLength,string terminator,string removeFromEnd,object tag,SocketCallBack callBack,SocketActivityCallback activityCallback) { Hashtable param = new Hashtable(); param.Add("recieveType","term"); param.Add("socket",socket); param.Add("strm",strm); param.Add("removeFromEnd",removeFromEnd); param.Add("tag",tag); param.Add("callBack",callBack); param.Add("activityCallback",activityCallback); param.Add("stack",new _FixedStack(terminator)); param.Add("nextReadWriteLen",1); param.Add("readedCount",(long)0); param.Add("maxLength",maxLength); param.Add("recieveBuffer",new byte[0]); ProccessData_Term(param); }
/// <summary> /// Begins asynchronous recieveing. /// </summary> /// <param name="socket">Socket from where to get data.</param> /// <param name="strm">Stream where to store data.</param> /// <param name="lengthToRead">Length of data to read.</param> /// <param name="maxLength">Maximum length of data which may read.</param> /// <param name="tag">User data.</param> /// <param name="callBack">Method to call, if receive completes.</param> /// <param name="activityCallback">Method to call, if data block is completed. Data is retrieved as blocks, /// for example data1 data2 ..., activity callback is called foreach data block.</param> public static void BeginRecieve(BufferedSocket socket,MemoryStream strm,long lengthToRead,long maxLength,object tag,SocketCallBack callBack,SocketActivityCallback activityCallback) { Hashtable param = new Hashtable(); param.Add("recieveType","len"); param.Add("socket",socket); param.Add("strm",strm); param.Add("lengthToRead",lengthToRead); param.Add("maxLength",maxLength); param.Add("tag",tag); param.Add("callBack",callBack); param.Add("activityCallback",activityCallback); param.Add("readedCount",(long)0); param.Add("recieveBuffer",new byte[0]); ProccessData_Len(param); }
/// <summary> /// Begins asynchronous recieveing. /// </summary> /// <param name="socket">Socket from where to get data.</param> /// <param name="strm">Stream where to store data.</param> /// <param name="lengthToRead">Length of data to read.</param> /// <param name="maxLength">Maximum length of data which may read.</param> /// <param name="tag">User data.</param> /// <param name="callBack">Method to call, if receive completes.</param> /// <param name="activityCallback">Method to call, if data block is completed. Data is retrieved as blocks, /// for example data1 data2 ..., activity callback is called foreach data block.</param> public static void BeginRecieve(BufferedSocket socket, MemoryStream strm, long lengthToRead, long maxLength, object tag, SocketCallBack callBack, SocketActivityCallback activityCallback) { Hashtable param = new Hashtable(); param.Add("recieveType", "len"); param.Add("socket", socket); param.Add("strm", strm); param.Add("lengthToRead", lengthToRead); param.Add("maxLength", maxLength); param.Add("tag", tag); param.Add("callBack", callBack); param.Add("activityCallback", activityCallback); param.Add("readedCount", (long)0); param.Add("recieveBuffer", new byte[0]); ProccessData_Len(param); }
/// <summary> /// Begins asynchronous recieveing. /// </summary> /// <param name="socket">Socket from where to get data.</param> /// <param name="strm">Stream where to store data.</param> /// <param name="maxLength">Maximum length of data which may read.</param> /// <param name="terminator">Terminator string which terminates reading. eg '\r\n'.</param> /// <param name="removeFromEnd">Removes following string at end of data.</param> /// <param name="tag">User data.</param> /// <param name="callBack">Method to call, if receive completes.</param> /// <param name="activityCallback">Method to call, if data block is completed. Data is retrieved as blocks, /// for example data1 data2 ..., activity callback is called foreach data block.</param> public static void BeginRecieve(BufferedSocket socket, MemoryStream strm, long maxLength, string terminator, string removeFromEnd, object tag, SocketCallBack callBack, SocketActivityCallback activityCallback) { Hashtable param = new Hashtable(); param.Add("recieveType", "term"); param.Add("socket", socket); param.Add("strm", strm); param.Add("removeFromEnd", removeFromEnd); param.Add("tag", tag); param.Add("callBack", callBack); param.Add("activityCallback", activityCallback); param.Add("stack", new _FixedStack(terminator)); param.Add("nextReadWriteLen", 1); param.Add("readedCount", (long)0); param.Add("maxLength", maxLength); param.Add("recieveBuffer", new byte[0]); ProccessData_Term(param); }