示例#1
0
        public void TestScenario()
        {
            NetQueue <int> queue = new NetQueue <int>(4);

            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);

            int[] arr = queue.ToArray();
            if (arr.Length != 3)
            {
                throw new Exception("NetQueue.ToArray failure");
            }
            if (arr[0] != 1 || arr[1] != 2 || arr[2] != 3)
            {
                throw new Exception("NetQueue.ToArray failure");
            }

            bool ok;
            int  a;

            if (queue.Contains(4))
            {
                throw new Exception("NetQueue Contains failure");
            }

            if (!queue.Contains(2))
            {
                throw new Exception("NetQueue Contains failure 2");
            }

            if (queue.Count != 3)
            {
                throw new Exception("NetQueue failed");
            }

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 1)
            {
                throw new Exception("NetQueue failure");
            }

            if (queue.Count != 2)
            {
                throw new Exception("NetQueue failed");
            }

            queue.EnqueueFirst(42);
            if (queue.Count != 3)
            {
                throw new Exception("NetQueue failed");
            }

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 42)
            {
                throw new Exception("NetQueue failed");
            }

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 2)
            {
                throw new Exception("NetQueue failed");
            }

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 3)
            {
                throw new Exception("NetQueue failed");
            }

            ok = queue.TryDequeue(out a);
            if (ok == true)
            {
                throw new Exception("NetQueue failed");
            }

            ok = queue.TryDequeue(out a);
            if (ok == true)
            {
                throw new Exception("NetQueue failed");
            }

            queue.Enqueue(78);
            if (queue.Count != 1)
            {
                throw new Exception("NetQueue failed");
            }

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 78)
            {
                throw new Exception("NetQueue failed");
            }

            queue.Clear();
            if (queue.Count != 0)
            {
                throw new Exception("NetQueue.Clear failed");
            }

            int[] arr2 = queue.ToArray();
            if (arr2.Length != 0)
            {
                throw new Exception("NetQueue.ToArray failure");
            }
        }
示例#2
0
        public static void Run()
        {
            NetQueue<int> queue = new NetQueue<int>(4);

            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);

            int[] arr = queue.ToArray();
            if (arr.Length != 3)
                throw new Exception("NetQueue.ToArray failure");
            if (arr[0] != 1 || arr[1] != 2 || arr[2] != 3)
                throw new Exception("NetQueue.ToArray failure");

            bool ok;
            int a;

            if (queue.Contains(4))
                throw new Exception("NetQueue Contains failure");

            if (!queue.Contains(2))
                throw new Exception("NetQueue Contains failure 2");

            if (queue.Count != 3)
                throw new Exception("NetQueue failed");

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 1)
                throw new Exception("NetQueue failure");

            if (queue.Count != 2)
                throw new Exception("NetQueue failed");

            queue.EnqueueFirst(42);
            if (queue.Count != 3)
                throw new Exception("NetQueue failed");

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 42)
                throw new Exception("NetQueue failed");

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 2)
                throw new Exception("NetQueue failed");

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 3)
                throw new Exception("NetQueue failed");

            ok = queue.TryDequeue(out a);
            if (ok == true)
                throw new Exception("NetQueue failed");

            ok = queue.TryDequeue(out a);
            if (ok == true)
                throw new Exception("NetQueue failed");

            queue.Enqueue(78);
            if (queue.Count != 1)
                throw new Exception("NetQueue failed");

            ok = queue.TryDequeue(out a);
            if (ok == false || a != 78)
                throw new Exception("NetQueue failed");

            queue.Clear();
            if (queue.Count != 0)
                throw new Exception("NetQueue.Clear failed");

            int[] arr2 = queue.ToArray();
            if (arr2.Length != 0)
                throw new Exception("NetQueue.ToArray failure");

            Console.WriteLine("NetQueue tests OK");
        }
示例#3
0
        public static void Run()
        {
            {
                var queue = new NetQueue <int>(4);

                queue.Enqueue(1);
                queue.Enqueue(2);
                queue.Enqueue(3);

                var arr = new int[queue.Count];
                queue.CopyTo(arr);
                if (arr.Length != 3)
                {
                    throw new Exception("NetQueue.CopyTo failure");
                }
                if (arr[0] != 1 || arr[1] != 2 || arr[2] != 3)
                {
                    throw new Exception("NetQueue.CopyTo failure");
                }

                bool ok;
                if (queue.Contains(4))
                {
                    throw new Exception("NetQueue Contains failure");
                }

                if (!queue.Contains(2))
                {
                    throw new Exception("NetQueue Contains failure 2");
                }

                if (queue.Count != 3)
                {
                    throw new Exception("NetQueue failed");
                }

                ok = queue.TryDequeue(out int a);
                if (ok == false || a != 1)
                {
                    throw new Exception("NetQueue failure");
                }

                if (queue.Count != 2)
                {
                    throw new Exception("NetQueue failed");
                }

                queue.EnqueueFirst(42);
                if (queue.Count != 3)
                {
                    throw new Exception("NetQueue failed");
                }

                ok = queue.TryDequeue(out a);
                if (ok == false || a != 42)
                {
                    throw new Exception("NetQueue failed");
                }

                ok = queue.TryDequeue(out a);
                if (ok == false || a != 2)
                {
                    throw new Exception("NetQueue failed");
                }

                ok = queue.TryDequeue(out a);
                if (ok == false || a != 3)
                {
                    throw new Exception("NetQueue failed");
                }

                ok = queue.TryDequeue(out a);
                if (ok == true)
                {
                    throw new Exception("NetQueue failed");
                }

                ok = queue.TryDequeue(out a);
                if (ok == true)
                {
                    throw new Exception("NetQueue failed");
                }

                queue.Enqueue(78);
                if (queue.Count != 1)
                {
                    throw new Exception("NetQueue failed");
                }

                ok = queue.TryDequeue(out a);
                if (ok == false || a != 78)
                {
                    throw new Exception("NetQueue failed");
                }

                queue.Clear();
                if (queue.Count != 0)
                {
                    throw new Exception("NetQueue.Clear failed");
                }

                int[] arr2 = new int[queue.Count];
                queue.CopyTo(arr2);
                if (arr2.Length != 0)
                {
                    throw new Exception("NetQueue.CopyTo failure");
                }
            }

            {
                var queue = new NetQueue <int>(8);
                queue.Enqueue(1);
                queue.Enqueue(2);
                queue.Enqueue(3);
                queue.EnqueueFirst(4);

                List <int> destination = new();
                int        drained     = queue.TryDrain(destination);

                if (destination.Count != drained)
                {
                    throw new Exception("NetQueue.TryDrain drained incorrect amount");
                }
            }

            Console.WriteLine("NetQueue tests OK");
        }
示例#4
0
        /// <summary>
        /// 비동기 메시지 전송
        /// </summary>
        /// <param name="callback"></param>
        public void SendMessageAsync(string page, object msg, Action <string> callback = null)
        {
            this.Message    = string.Empty;
            this.ReturnCode = -1;

            try
            {
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create($"{ServiceUrl}/{page}");
                req.Method      = "POST";
                req.ContentType = "Application/json";


                string str;
                if (msg != null)
                {
                    str = JsonUtility.ToJson(msg);
                }
                else
                {
                    str = "{}";
                }

                byte[] buff = Encoding.UTF8.GetBytes(str);
                req.ContentLength = buff.Length;
                req.GetRequestStream().Write(buff, 0, buff.Length);


                req.Timeout = 5000; // TODO: The Timeout property has no effect on asynchronous requests made with the BeginGetResponse
                req.BeginGetResponse((IAsyncResult ar) =>
                {
                    try
                    {
                        HttpWebRequest request   = (HttpWebRequest)ar.AsyncState;
                        HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;

                        if (response != null && response.StatusCode == HttpStatusCode.OK)
                        {
                            // no error. use the result
                            StreamReader reader = new StreamReader(response.GetResponseStream());
                            string result       = reader.ReadToEnd();
                            Debug.Log("result : " + result);

                            m_releasedIncomingMessages.Enqueue(() =>
                            {
                                callback?.Invoke(result);
                            });
                        }
                        else
                        {
                            // a response but some error on server. show message
                            this.Message = "Failed to connect to Cloud Account Service. Please register via account website.";
                        }
                    }
                    catch (Exception ex)
                    {
                        // not even a response. show message
                        this.Message   = "Failed to connect to Cloud Account Service. Please register via account website.";
                        this.Exception = ex;

                        Debug.Log(ex);
                    }
                }, req);
            }
            catch (Exception ex)
            {
                this.Message   = "Failed to connect to Cloud Account Service. Please register via account website.";
                this.Exception = ex;

                Debug.Log(ex);
            }
        }
 internal void QueueAck(NetMessageType tp, int sequenceNumber)
 {
     m_queuedOutgoingAcks.Enqueue(new NetTuple <NetMessageType, int>(tp, sequenceNumber));
 }
        // received a library message while Connected
        internal void ReceivedLibraryMessage(NetMessageType tp, int ptr, int payloadLength)
        {
            m_peer.VerifyNetworkThread();

            double now = NetTime.Now;

            switch (tp)
            {
            case NetMessageType.Connect:
                m_peer.LogDebug("Received handshake message (" + tp + ") despite connection being in place");
                break;

            case NetMessageType.ConnectResponse:
                // handshake message must have been lost
                HandleConnectResponse(now, tp, ptr, payloadLength);
                break;

            case NetMessageType.ConnectionEstablished:
                // do nothing, all's well
                break;

            case NetMessageType.LibraryError:
                m_peer.ThrowOrLog("LibraryError received by ReceivedLibraryMessage; this usually indicates a malformed message");
                break;

            case NetMessageType.Disconnect:
                NetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength);

                m_disconnectRequested  = true;
                m_disconnectMessage    = msg.ReadString();
                m_disconnectReqSendBye = false;
                //ExecuteDisconnect(msg.ReadString(), false);
                break;

            case NetMessageType.Acknowledge:
                for (int i = 0; i < payloadLength; i += 3)
                {
                    NetMessageType acktp = (NetMessageType)m_peer.m_receiveBuffer[ptr++];                             // netmessagetype
                    int            seqNr = m_peer.m_receiveBuffer[ptr++];
                    seqNr |= (m_peer.m_receiveBuffer[ptr++] << 8);

                    // need to enqueue this and handle it in the netconnection heartbeat; so be able to send resends together with normal sends
                    m_queuedIncomingAcks.Enqueue(new NetTuple <NetMessageType, int>(acktp, seqNr));
                }
                break;

            case NetMessageType.Ping:
                int pingNr = m_peer.m_receiveBuffer[ptr++];
                SendPong(pingNr);
                break;

            case NetMessageType.Pong:
                NetIncomingMessage pmsg = m_peer.SetupReadHelperMessage(ptr, payloadLength);
                int   pongNr            = pmsg.ReadByte();
                float remoteSendTime    = pmsg.ReadSingle();
                ReceivedPong(now, pongNr, remoteSendTime);
                break;

            case NetMessageType.ExpandMTURequest:
                SendMTUSuccess(payloadLength);
                break;

            case NetMessageType.ExpandMTUSuccess:
                if (m_peer.Configuration.AutoExpandMTU == false)
                {
                    m_peer.LogDebug("Received ExpandMTURequest altho AutoExpandMTU is turned off!");
                    break;
                }
                NetIncomingMessage emsg = m_peer.SetupReadHelperMessage(ptr, payloadLength);
                int size = emsg.ReadInt32();
                HandleExpandMTUSuccess(now, size);
                break;

            case NetMessageType.NatIntroduction:
                // Unusual situation where server is actually already known, but got a nat introduction - oh well, lets handle it as usual
                m_peer.HandleNatIntroduction(ptr);
                break;

            default:
                m_peer.LogWarning("Connection received unhandled library message: " + tp);
                break;
            }
        }