private void HandleMessageThread() { while (true) { ReceivedMessage receivedMessage = new ReceivedMessage(); while (_receivedQueue.TryDequeue(out receivedMessage)) { var handler = _handlerList.Find(q => q.MessageType.Name == Utility.GetMessageType(receivedMessage.message)); if (handler != null & handler.Handlers.Count > 0) { object message = JsonExtension.FromJSON(handler.MessageType, receivedMessage.message); foreach (Action <int, object> handle in handler.Handlers) { //Task.Run(() => handle(arg1, message)); if (handle != null) { handle(receivedMessage.connectID, message); } } OnReceivedObject?.Invoke(GetClientIpById(receivedMessage.connectID), GetClientPortIpById(receivedMessage.connectID), receivedMessage.connectID, message); } else { // if no handler, directly convert to object, but what this object will be?? object message = JsonExtension.FromJSON(receivedMessage.message); OnReceivedObject?.Invoke(GetClientIpById(receivedMessage.connectID), GetClientPortIpById(receivedMessage.connectID), receivedMessage.connectID, message); } } Thread.Sleep(1000); } }
private void HandleMessageThread() { while (true) { string strMessage = string.Empty; while (_receivedQueue.TryDequeue(out strMessage)) { var handler = _handlerList.Find(q => q.MessageType.Name == Utility.GetMessageType(strMessage)); if (handler != null && handler.Handlers.Count > 0) { object message = JsonExtension.FromJSON(handler.MessageType, strMessage); //try waitting queue CheckWattingQueue(message); foreach (Action <object> action in handler.Handlers) { if (action != null) { action(message); } } OnReceivedObject?.Invoke(message); } else { // if no handler, directly convert to object, but what this object will be?? object message = JsonExtension.FromJSON(strMessage); OnReceivedObject?.Invoke(message); } } Thread.Sleep(1000); } }
private BaseWebReader ExecuteServerRequest(bool async, string webAddress = null, string request = null, object obj = null, NameValueCollection form = null, OnReceivedObject executeOnReceivedObject = null, int secWaitAnswer = 0, Action executeIfNoAnswer = null, int secTimeOut = 0, string toUser = null, bool cancelAllMyRequest = false, bool removeObjectsToMe = false, bool removeMyObjects = false) { if (webAddress == null) { webAddress = UrlServer(); } webAddress = webAddress.TrimEnd('/'); webAddress += "/?network=" + Uri.EscapeDataString(_networkConnection.NetworkName) + "&app=" + Uri.EscapeDataString(_appName) + "&fromUser="******"&secWaitAnswer=" + secWaitAnswer; if (cancelAllMyRequest) { webAddress += "&cancelRequest=true"; } if (removeObjectsToMe) { webAddress += "&removeObjects=true"; } if (removeMyObjects) { webAddress += "&removeMyObjects=true"; } if (string.IsNullOrEmpty(toUser)) { toUser = _masterServerMachineName + "."; } if (!string.IsNullOrEmpty(toUser)) { webAddress += "&toUser="******"&request=" + request; } Action <string> parser = null; if (executeOnReceivedObject != null) { parser = html => { Converter.XmlToObject(html, typeof(ObjectVector), out var returnObj); var objectVector = (ObjectVector)returnObj; if (objectVector != null) { executeOnReceivedObject.Invoke(objectVector.FromUser, objectVector.ObjectName, objectVector.XmlObject); } } } ; else { webAddress += "&noGetObject=true"; } if (obj != null) { webAddress += "&post=" + obj.GetType().Name + "&secTimeout=" + secTimeOut; var str = new StringWriter(); var xml = new XmlSerializer(obj.GetType()); var xmlns = new XmlSerializerNamespaces(); xmlns.Add(string.Empty, string.Empty); xml.Serialize(str, obj, xmlns); var postData = str.ToString(); if (form == null) { form = new NameValueCollection(); } var strCod = HttpUtility.UrlEncode((Utility.MinifyXml(postData))); form.Add("object", strCod); } if (webAddress.StartsWith("vd://")) { return(VirtualReadWeb(async, _networkConnection.VirtualDevice, webAddress, parser, null, form, secWaitAnswer, executeIfNoAnswer)); } return(ReadWeb(async, webAddress, parser, null, form, secWaitAnswer, executeIfNoAnswer)); //var virtualDevice = Device.FindDeviceByAddress(webAddress); //return virtualDevice != null // ? VirtualReadWeb(async, Converter.UintToIp(_networkConnection.VirtualDevice.Ip), webAddress, parser, null, form, secWaitAnswer, executeIfNoAnswer, virtualDevice) : (BaseWebReader)ReadWeb(async, webAddress, parser, null, form, secWaitAnswer, executeIfNoAnswer); }
private static WebReader ExecuteServerRequest(bool Async, string WebAddress = null, OnReceivedObject ExecuteOnReceivedObject = null, int SecWaitAnswer = 0, Action ExecuteIfNoAnswer = null, object Obj = null, System.Collections.Specialized.NameValueCollection Dictionary = null, int SecTimeOut = 0, string ToUser = null, bool CancellAllMyRequest = false, bool RemoveObjectsToMe = false, bool RemoveMyObjects = false) { if (WebAddress == null) { WebAddress = UrlServer(); } WebAddress = WebAddress.TrimEnd('/'); WebAddress += "/appserver.aspx?app=" + System.Uri.EscapeDataString(AppName) + "&fromuser="******"&secwaitanswer=" + SecWaitAnswer.ToString(); if (CancellAllMyRequest) { WebAddress += "&cancellrequest=true"; } if (RemoveObjectsToMe) { WebAddress += "&removeobjects=true"; } if (RemoveMyObjects) { WebAddress += "&removemyobjects=true"; } // NUOVA VERSIONE AGGIUNGERE QUESTA LINEA if (ToUser == "") { ToUser = Setup.Network.MasterServerMachineName + "."; } if (ToUser != "") { WebAddress += "&touser="******"&nogetobject=true"; } if (Obj != null) { WebAddress += "&post=" + Obj.GetType().Name + "§imeout=" + SecTimeOut.ToString(); System.IO.StringWriter Str = new System.IO.StringWriter(); System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(Obj.GetType()); System.Xml.Serialization.XmlSerializerNamespaces xmlns = new System.Xml.Serialization.XmlSerializerNamespaces(); xmlns.Add(string.Empty, string.Empty); xml.Serialize(Str, Obj, xmlns); string postData = Str.ToString(); if (Dictionary == null) { Dictionary = new System.Collections.Specialized.NameValueCollection(); } string StrCod = Converter.StringToBase64(postData); Dictionary.Add("object", StrCod); } return(ReadWeb(Async, WebAddress, Parser, null, Dictionary, SecWaitAnswer, ExecuteIfNoAnswer)); }