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"); } }
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"); }
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"); }
/// <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; } }