Exemple #1
0
        public Job(Socket socket, IOCallback ioCallback)
        {
            this.socket = socket;

            this.buffer = new MemoryStreamBuffer();

            this.ioCallback = ioCallback;
        }
Exemple #2
0
 public TunnelWriter(TunnelPipeline tunnelPipeline, byte[] headerBuffer, IPacket packet, IOCallback <TState> callback, TState state)
 {
     this.tunnelPipeline = tunnelPipeline;
     this.packet         = packet;
     this.callback       = callback;
     this.state          = state;
     this.headerBuffer   = headerBuffer;
 }
Exemple #3
0
 public void AddCallback(IOCallback callback)
 {
     EffekseerNativePINVOKE.IO_AddCallback(swigCPtr, IOCallback.getCPtr(callback));
     if (EffekseerNativePINVOKE.SWIGPendingException.Pending)
     {
         throw EffekseerNativePINVOKE.SWIGPendingException.Retrieve();
     }
 }
Exemple #4
0
        internal void Construct <TState>(IOCallback <TState> callback, TState state)
        {
            if (dataProvider == null)
            {
                dataProvider = new HttpDataProvider(source);
            }

            dataProvider.ReadLine(ParseProtocol <TState>, new object[] { callback, state });
        }
Exemple #5
0
        public void Output <TState>(IPacket packet, IOCallback <TState> callback, TState state = default(TState))
        {
            if (packet.Disposed)
            {
                throw new InvalidOperationException("packet is disposed.");
            }

            new TunnelWriter <TState>(this, header, packet, callback, state).Execute();
        }
Exemple #6
0
        void WriteTunnelPacket <TWriteState>(TunnelPacket packet, IOCallback <TWriteState> callback, TWriteState state)
        {
            var pipeline = tunnelPipeline.TransPipeline;

            pipeline.Output(
                (BufferPacket)packet.HeaderData,
                CompleteHeaderWrite <TWriteState>,
                new object[] { packet, callback, state }
                );
        }
Exemple #7
0
        void IPipeline.Input <TState>(IOCallback <TState> callback, TState state)
        {
            if (!input.Disposed)
            {
                throw new InvalidOperationException("Current packet is not disposed.");
            }

            try
            {
                GetStream().BeginRead(packetBuffer, 0, packetBuffer.Length, CompleteInput <TState>, new object[] { callback, state });
            }
            catch (IOException) { Interrupte(); }
            catch (ObjectDisposedException) { Interrupte(); }
        }
Exemple #8
0
        public void Input <TState>(IOCallback <TState> callback, TState state = default(TState))
        {
            if (!packet.Disposed)
            {
                throw new InvalidOperationException("Current packet is NOT disposed.");
            }

            try
            {
                Stream.BeginRead(packet.Buffer, 0, packet.Buffer.Length, OnInput <TState>, new object[] { callback, state });
            }
            catch (IOException) { Interrupte(); }
            catch (ObjectDisposedException) { }
        }
Exemple #9
0
        void ContinueConstruct <TState>(IOCallback <TState> callback, TState state)
        {
            for (; headerSize < HeaderSize && sourceOffset < sourceSize; headerSize++)
            {
                header[headerSize] = source[sourceOffset++];
            }

            if (headerSize < HeaderSize)            // 信息头未解析完成
            {
                ReadMoreData <TState>(new object[] { callback, state });
                return;
            }

            HeaderSerializer.Deserialize(header, this);
            // 检查报文有效性
            if (Magic != MagicValue || Version != VersionValue)
            {
                trans.Interrupte();
                return;
            }

            length = Length;
            callback(Source, this, state);
        }
Exemple #10
0
        void IPipeline.Output <TState>(IPacket packet, IOCallback <TState> callback, TState state)
        {
            if (packet.Disposed)
            {
                throw new InvalidOperationException("Packet is disposed.");
            }

            var args = new object[] { callback, packet, state, 0 };

            if (Interlocked.Exchange(ref outputting, 1) == 1)
            {
                lock (queueLocker)
                {
                    if (outputQueue == null)
                    {
                        outputQueue = new Queue <object[]>(1);
                    }
                    outputQueue.Enqueue(args);
                }
                return;
            }

            packet.Read(WritePacketData <TState>, args);
        }
Exemple #11
0
 /// <summary>
 /// 创建包
 /// </summary>
 /// <typeparam name="TState"></typeparam>
 /// <param name="callback"></param>
 /// <param name="state"></param>
 public void Construct <TState>(IOCallback <TState> callback, TState state)
 {
     headerSize = 0;
     ContinueConstruct(callback, state);
 }
Exemple #12
0
        //private int maxSocketCountPerWorker = 200;
        //private int maxWorkerCount = 100;


        public Listener(Socket socket, IOCallback ioCallback)
        {
            this.socket     = socket;
            this.ioCallback = ioCallback;
        }
Exemple #13
0
 public void AddCallback(IOCallback callback)
 {
     callbacks.Add (callback);
 }
Exemple #14
0
 public void RemoveCallback(IOCallback callback)
 {
     callbacks.Remove (callback);
 }
 /// <summary>
 /// Sends a message with optional POST content to the server.
 /// </summary>
 /// <param name="anUrl">URL to send data to.</param>
 /// <param name="aPostContent">POST content or null if there is none.</param>
 /// <param name="aCallback">Callback that will be invoked once sending has finished.</param>
 private IEnumerator DoSend(string anUrl, string aPostContent, IOCallback aCallback)
 {
     // debug
     #if DEBUG || UNITY_EDITOR
       IQUSDK.Instance.AddLog("[Network][Sending] " + anUrl);
       if (aPostContent != null) {
     IQUSDK.Instance.AddLog("[Network][Content] " + aPostContent);
       }
     #endif
       switch (IQUSDK.Instance.TestMode)
       {
     case IQUTestMode.SimulateOffline:
       // wait for 2 seconds
       yield return new WaitForSeconds(2);
       this.SimulateOffline(aCallback);
       return false;
     case IQUTestMode.SimulateServer:
       // wait for 2 seconds
       yield return new WaitForSeconds(2);
       this.SimulateServer(aCallback);
       return false;
       }
       // set custom headers
     #if UNITY_2 || UNITY_3 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4
       Hashtable postHeaders = new Hashtable(10);
     #else
       Dictionary<string, string> postHeaders = new Dictionary<string, string>(30);
     #endif
       postHeaders.Add("Content-Type", "application/json");
       postHeaders.Add("SdkType", IQUSDK.SdkType);
       postHeaders.Add("SdkVersion", IQUSDK.SdkVersion);
       // encoding is used to get the JSON string in correct byte array
       UTF8Encoding encoding = new UTF8Encoding();
       // send request
       WWW request = new WWW(anUrl, aPostContent == null ? null : encoding.GetBytes(aPostContent), postHeaders);
       yield return request;
       // check if server returned content
       bool hasContent = String.IsNullOrEmpty(request.error) && !String.IsNullOrEmpty(request.text);
       // debug
     #if DEBUG || UNITY_EDITOR
       IQUSDK.Instance.AddLog("[Network][Response] " + anUrl);
       if (!String.IsNullOrEmpty(request.error))
       {
     IQUSDK.Instance.AddLog("[Network][Response][Error] " + request.error);
       }
       IQUSDK.Instance.AddLog("[Network][Response][Headers] " + this.GetHeaders(request));
       if (hasContent)
       {
     string text = request.text.Replace("\n", "");
     IQUSDK.Instance.AddLog("[Network][Response][Content] " + text);
       }
     #endif
       // server returned content? Y: assume it is JSON and de-serialize it; N: create empty result
       Dictionary<string,object> result = hasContent ? MiniJSON.Json.Deserialize(request.text) as Dictionary<string, object> : new Dictionary<string, object>(2);
       // error parsing json?
       if (result == null)
       {
     // yes, set error
     result = new Dictionary<string, object>(2);
     result.Add(IQUNetwork.Error, "error parsing JSON result data.");
       }
       else
       {
     // try to determine code
     int code = this.GetResponseCode(request);
     // sometimes server returns 100, even though all content has been received; replace with 200
     if (code == 100)
     {
       code = 200;
     }
     // add code and error (if any)
     if (code >= 0)
     {
       // add code
       result.Add(IQUNetwork.Code, code);
       // debug
       IQUSDK.Instance.AddLog("[Network][Response][Code] " + code.ToString());
     }
     if (!String.IsNullOrEmpty(request.error))
     {
       result.Add(IQUNetwork.Error, request.error);
     }
     else if (((code < 200) || (code > 299)) && (code >= 0))
     {
       result.Add(IQUNetwork.Error, "http status code " + code.ToString() + " indicates invalid action");
     }
       }
       aCallback(result);
 }
Exemple #16
0
 public void RunCallback(IOCallback callback)
 {
     try {
         callback ();
     } catch (Exception e) {
         HandleCallbackException (e);
     }
 }
 /// <summary>
 /// Invokes an url using GET.
 /// </summary>
 /// <param name="anUrl">An URL to invoke.</param>
 /// <param name="aCallback">Callback that will be invoked once sending has finished.</param>
 private void Send(string anUrl, IOCallback aCallback)
 {
     this.Send(anUrl, null, aCallback);
 }
Exemple #18
0
 public void Input <TState>(IOCallback <TState> callback, TState state = default(TState))
 {
     inputPacket.Construct(callback, state);
 }
 /// <summary>
 /// Sends data to an url.
 /// </summary>
 /// <param name="anUrl">An URL.</param>
 /// <param name="aPostContent">A post content or null if there is no post content.</param>
 /// <param name="aCallback">Callback that will be invoked once sending has finished.</param>
 private void Send(string anUrl, string aPostContent, IOCallback aCallback)
 {
     IQUSDK.Instance.Helper.StartCoroutine(this.DoSend(anUrl, aPostContent, aCallback));
 }
Exemple #20
0
 /// <summary>
 ///
 /// </summary>
 /// <typeparam name="TState"></typeparam>
 /// <param name="packet"></param>
 /// <param name="callback"></param>
 /// <param name="state"></param>
 public void Output <TState>(IPacket packet, IOCallback <TState> callback, TState state = default(TState))
 {
     packet.Read(OnRead <TState>, new object[] { packet, callback, state, 0 });
 }
Exemple #21
0
 void IPipeline.Output <TState>(IPacket packet, IOCallback <TState> callback, TState state)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Sends a signed message to the server.
 /// </summary>
 /// <param name="anUrl">URL without parameters</param>
 /// <param name="aPostContent">Content that will be posted to the server.</param>
 /// <param name="aCallback">Callback that will be invoked once sending has finished.</param>
 private void SendSigned(string anUrl, string aPostContent, IOCallback aCallback)
 {
     string signature = this.GenerateHMACSHA512(this.m_secretKey, aPostContent);
       this.Send(anUrl + "?api_key=" + this.m_apiKey + "&signature=" + signature, aPostContent, aCallback);
 }
 /// <summary>
 /// Simulates an off-line state. The method invokes the callback with an error result.
 /// </summary>
 /// <param name="aCallback">Callback that will be invoked once sending has finished.</param>
 private void SimulateOffline(IOCallback aCallback)
 {
     // debug
       IQUSDK.Instance.AddLog("[Network] simulating off-line.");
       // build result for off-line
       Dictionary<string, object> result = new Dictionary<string, object>(1);
       result.Add(IQUNetwork.Error, "simulating off-line, IQUSDK.Instance.TestMode == IQUTestMode.SimulateOffline");
       aCallback(result);
 }
Exemple #24
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(IOCallback obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
 /// <summary>
 /// Simulates a correct response without any actual server communication. The method invokes the callback with a successful result.
 /// </summary>
 /// <param name="aCallback">Callback that will be invoked once sending has finished.</param>
 private void SimulateServer(IOCallback aCallback)
 {
     // debug
       IQUSDK.Instance.AddLog("[Network] simulating server response.");
       // simulate on-line and successful attempt
       Dictionary<string, object> result = new Dictionary<string, object>(4);
       result.Add(IQUNetwork.Code, 200);
       result.Add("status", "ok");
       result.Add("request_id", "2a7-558bf465ed65-b79a84");
       result.Add("time", "2015-06-26 12:00:00 UTC");
       aCallback(result);
 }
Exemple #26
0
 public static void SetIOCallback(IOCallback callback)
 {
     Callback = callback;
 }
Exemple #27
0
 void IPipeline.Input <TState>(IOCallback <TState> callback, TState state)
 {
     request.Construct(callback, state);
 }