Example #1
0
        private static void BatchSendRequestAdd(IClient.IMyClient myClient)
        {
            int v1 = new Random().Next(3, 9);

            int[] v2 = new int[] { 1, 2, 3, 4, 5 };
            foreach (int i in v2)
            {
                Task.Factory.StartNew(() =>
                {
                    try
                    {
                        log4j.Info(string.Format("RequestAdd {0} {1}", v1, i));
                        //Task<Data.ResponseAdd> responseAdd = client.RequestAddAsync(v1, i);
                        //log4j.Info(string.Format("ResponseAdd {0} + {1} = {2}", v1, i, responseAdd.Result.Result));

                        WebSocket.Data.ResponseAdd response = myClient.RequestAdd(v1, i);
                        log4j.Info(string.Format("responseAdd: {0} + {1} = {2}", v1, i, response.Result));
                    }
                    catch (Exception ex)
                    {
                        log4j.Info(string.Format("RequestAdd {0} {1} {2}", v1, i, ex.Message));
                    }
                });
            }
        }
        public WebSocket.Data.ResponseAdd RequestAdd(int timeOutMilliSec, params int[] param)
        {
            Data.RequestAdd requestAdd = new Data.RequestAdd {
                UUID = Guid.NewGuid().ToString()
            };
            foreach (int p in param)
            {
                requestAdd.Param.Add(p);
            }

            // set a timeout on this call to server!
            // if we do not hv this timeout, calling this RequestAdd method will forever waiting if server never response!
            TaskCompletionSource <Data.ResponseAdd> tcs = new TaskCompletionSource <Data.ResponseAdd>();
            CancellationTokenSource ct = new CancellationTokenSource(timeOutMilliSec);

            ResponseAddHandler rah = ((rpAdd) =>
            {
                // only want the response UUID which is same as what we send
                if (rpAdd.UUID == requestAdd.UUID)
                {
                    tcs.TrySetResult(rpAdd);
                }
            });

            // when timeout occur, set Exception to TaskCompletionSource
            // also remove the callback from eventhandler
            ct.Token.Register(() =>
            {
                OnResponseAdd -= rah;
                tcs.TrySetException(new TimeoutException("TimeOut " + timeOutMilliSec));
            }, useSynchronizationContext: false);

            OnResponseAdd += rah;   //hook to the eventHandler
            Send(WebSocket.Data.Cmd.TcsCommand.RequestAdd.ToString(), requestAdd);

            tcs.Task.Wait();
            WebSocket.Data.ResponseAdd responseAdd = tcs.Task.Result;
            OnResponseAdd -= rah;   //after received our response, unhook it. we only expecting 1 response.

            return(responseAdd);
        }
Example #3
0
        static void Main(string[] args)
        {
            log4j.Info("Start Main");

            ////WebSocket4Net.JsonWebSocket websocket = new WebSocket4Net.JsonWebSocket("ws://127.0.0.1:2012");
            string serverIP   = ConfigurationManager.AppSettings["ServerIP"].ToString();
            string serverPort = ConfigurationManager.AppSettings["ServerPort"].ToString();

            ////WebSocket4Net.WebSocket websocket = new WebSocket4Net.WebSocket(string.Format("ws://{0}:{1}", serverIP, serverPort));
            //WebSocket.Client.MyJsonWebSocket websocket = new WebSocket.Client.MyJsonWebSocket(string.Format("ws://{0}:{1}", serverIP, serverPort));

            //websocket.Opened += new EventHandler((s, e) =>
            //{
            //    log4j.Info("Opened");
            //});
            //websocket.Closed += new EventHandler((s, e) =>
            //{
            //    log4j.Info("Closed");
            //});
            //websocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>((s, e) =>
            //{
            //    log4j.Info("error", e.Exception);
            //});


            //websocket.Open();
            //log4j.Info(websocket.State);

            IClient.IMyClient websocket = new WebSocket.Client.MyWebSocketClient(serverIP, int.Parse(serverPort));
            websocket.TimeOutMilliSec = 8000;
            websocket.OnClosed       += new EventHandler((s, e) =>
            {
                log4j.Info("Closed");
            });
            websocket.OnError += new EventHandler <System.IO.ErrorEventArgs>((s, e) =>
            {
                log4j.Info("error", e.GetException());
            });
            websocket.OnConnected += new EventHandler((s, e) =>
            {
                log4j.Info("connected");
            });


            // handle data send from server!!
            websocket.OnResponseEcho += new IClient.ResponseEchoHandler((responseEcho) =>
            {
                log4j.Info("Received echo: " + responseEcho.Message);
            });


            websocket.Start();
            log4j.Info("client isconnected: " + websocket.IsConnected());

            string cmd = "";

            while (cmd != "q")
            {
                //websocket.
                if (cmd == "1")
                {
                    //websocket.Send(cmd);
                    try
                    {
                        // call the server command and wait for the data!!
                        WebSocket.Data.ResponseAdd responseAdd = websocket.RequestAdd(1, 2, 2);
                        log4j.Info("ResponseAdd: " + responseAdd.Result);
                    } catch (Exception ex)
                    {
                        log4j.Info("RequestAdd error: ", ex);
                    }
                }
                else if (cmd == "2")
                {
                    string msg = "Bla bla bla " + DateTime.Now;
                    log4j.Info("RequestEcho: " + msg);
                    websocket.RequestEcho(msg);
                }
                else if (cmd == "3")
                {
                    log4j.Info("isConnected: " + websocket.IsConnected());
                }
                else if (cmd == "4")
                {
                    BatchSendRequestAdd(websocket);
                }
                else if (cmd == "5")
                {
                    ((WebSocket.Client.MyWebSocketClient)websocket).HandlerCount();
                }
                cmd = Console.ReadLine();
            }
            //websocket.close();
            websocket.Stop();
        }