Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
        }