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); }
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(); }