Esempio n. 1
0
        private void FireNetEvent(NetClientEventType eventType) // put it in my queue, cost it in unity main thread, because of unity frame limitation
        {
            NetClientEvent ne = DataObjectPool.Factory <NetClientEvent>();

            ne.socketId  = sid;
            ne.eventType = eventType;
            lock (eventQueue)
            {
                Debug.Log("fireNetEvent: " + sid + " --> " + eventType);
                eventQueue.Enqueue(ne);
            }
        }
Esempio n. 2
0
        private void SocketConnectAsyncCallBack(IAsyncResult asyncResult)
        {
            Debug.Log(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff") + " SocketConnectAsyncCallBack start");
            try
            {
                Socket socket = asyncResult.AsyncState as Socket;
                if (socket != null)
                {
                    socket.EndConnect(asyncResult);
                    //Debug.Log(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff") + " SocketConnectAsyncCallBack socket ok");
                    if (NetConst.IsPrintLog)
                    {
                        Debug.Log(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff") + " ConnectSocket ok ep=" + endp + "  socketId" + sid);
                    }
                    tempSocketConnectOKFlag = true;
                    needReconnectFlag       = false;

                    status = SocketStatus.Ok;
                    rdata  = DataObjectPool.Factory <NetRawData>();
                    UpdateLatestHeartBeatActiveTime();
                    UpdateLastSendHeartBeatMessageTime();
                    //sConnect.Dispatch(sid);

                    if (!hasConnectedBefore)
                    {
                        FireNetEvent(NetClientEventType.Connected);
                        hasConnectedBefore = true;
                    }
                    else
                    {
                        FireNetEvent(NetClientEventType.ReConnected);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.Log(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff") + " SocketConnectAsyncCallBack error: " + e);
            }
        }
Esempio n. 3
0
        private bool ReadData()
        {
            bool gotData = false;

            try
            {
                lock (this)
                {
                    int avail = socket.Available;
                    while (avail > 0)
                    {
                        UpdateLatestHeartBeatActiveTime();
                        gotData = true;
                        //lastSendTime = -1;
                        //Debug.Log("ReadData: " + avail);
                        //if (NetConst.IsPrintLog) Debug.Log(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff") + " ReadData available: " + avail);

                        if (rdata.total > NetConst.ReceiveBufferSize && Application.isEditor)
                        {
                            Debug.LogError("Extend net receive buffer size: " + NetConst.ReceiveBufferSize + ", total: " + rdata.total);
                        }

                        int _bufferLength = rdata.buffer.Length;
                        if (rdata.total >= _bufferLength)
                        {
                            Array.Resize <byte>(ref rdata.buffer, rdata.total + 100);
                        }

                        int byt = socket.Receive(rdata.buffer, rdata.read, rdata.total - rdata.read, SocketFlags.None);

                        avail      -= byt;
                        rdata.read += byt;
                        if (rdata.read == rdata.total)
                        {
                            if (rdata.state == ReadState.Header)
                            {
                                int len              = BitConverter.ToInt32(rdata.buffer, 0);
                                int msgNameLength    = BitConverter.ToInt32(rdata.buffer, 4);
                                int msgContentLength = len - 8 - msgNameLength;
                                Debug.Log("len=" + len + ", msgNameLength=" + msgNameLength + ", msgContentLength=" + msgContentLength);

                                rdata.msgNameLen = msgNameLength;
                                rdata.read       = 0;
                                rdata.total      = len - 8; // minus 8 bytes head length
                                rdata.state      = ReadState.Content;
                                rdata.socketId   = sid;
                            }
                            else
                            {
                                rdata.stream.Seek(0, SeekOrigin.Begin);
                                rdata.stream.SetLength(0);
                                string msgName = Encoding.UTF8.GetString(rdata.buffer, 0, rdata.msgNameLen); // BitConverter.ToString(rdata.buffer, 0, rdata.msgNameLen);
                                Debug.Log("msgName=" + msgName);

                                rdata.msgName = msgName;
                                if (rdata.total - rdata.msgNameLen > 0)
                                {
                                    rdata.stream.Write(rdata.buffer, rdata.msgNameLen, rdata.total - rdata.msgNameLen);
                                    rdata.stream.SetLength(rdata.total - rdata.msgNameLen);
                                }

                                Debug.Log("======================== " + (rdata.total - rdata.msgNameLen));

                                dataAsyncPool.Enqueue(rdata);

                                rdata          = DataObjectPool.Factory <NetRawData>();
                                rdata.socketId = sid;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.LogError(ex);
                MarkReconnect();
            }
            return(gotData);
        }