public void SendMessages(object o) { ClientSharedStateObject SharedStateObj = (ClientSharedStateObject)o; while (SharedStateObj.ContinueProcess) { if (SharedStateObj.OutBoundMessageQueue.Count > 0) { lock (SharedStateObj.OutBoundMessageQueue) { foreach (var message in SharedStateObj.OutBoundMessageQueue) { lock (clientStream) { var jsonMessage = JsonConvert.SerializeObject(message, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Objects }); Byte[] sendBytes = Encoding.ASCII.GetBytes(jsonMessage); clientStream.Write(sendBytes, 0, sendBytes.Length); } } SharedStateObj.OutBoundMessageQueue.Clear(); } } Thread.Sleep(100); } clientStream.Close(); }
public override void ClientProcessMessage(ClientSharedStateObject SharedStateObj) { Console.WriteLine("Sent from: " + this.Sender); Console.WriteLine("\tData: " + this.Data); Console.WriteLine("\tRouted through: " + this.RoutedThrough); Console.WriteLine("\tCreation Date" + this.creationDate.ToLongTimeString()); }
public void Listen(Object o) { ClientSharedStateObject sharedStateObj = (ClientSharedStateObject)o; string data = null; List <BaseMessage> receivedMessages = null; byte[] bytes; if (ClientSocket != null) { NetworkStream networkStream = ClientSocket.GetStream(); ClientSocket.ReceiveTimeout = 100; while (sharedStateObj.ContinueProcess) { bytes = new byte[ClientSocket.ReceiveBufferSize]; try { int bytesRead; lock (networkStream) { bytesRead = networkStream.Read(bytes, 0, (int)ClientSocket.ReceiveBufferSize); } if (bytesRead > 0) { data = Encoding.ASCII.GetString(bytes, 0, bytesRead); data = data.Replace("}{\"$type\":", "},{\"$type\":"); receivedMessages = JsonConvert.DeserializeObject <List <BaseMessage> >("[" + data + "]", new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto }); lock (sharedStateObj.InBoundMessageQueue) { foreach (var message in receivedMessages) { sharedStateObj.InBoundMessageQueue.Enqueue(message); } } } } catch (IOException) { } // Timeout catch (JsonSerializationException e) { Console.WriteLine(e); } catch (SocketException) { Console.WriteLine("Socket is broken."); break; } Thread.Sleep(200); } } }
//public override void ClientProcessMessage(IMessage message) //{ // Console.WriteLine(HandlerData); // message.ClientProcessMessage(); //} //public override void ServerProcessMessage(IMessage message, object os) //{ // Console.WriteLine(HandlerData); // message.ServerProcessMessage(); //} public override void ClientProcessMessage(BaseMessage message, ClientSharedStateObject sharedStateObj) { Console.WriteLine(HandlerData); message.ClientProcessMessage(sharedStateObj); }
public override void ClientProcessMessage(BaseMessage message, ClientSharedStateObject sharedStateObj) { throw new NotImplementedException(); }
public override void ClientProcessMessage(BaseMessage message, ClientSharedStateObject sharedStateObj) { //sharedStateObj.ClientID = message.c message.ClientProcessMessage(sharedStateObj); }
public abstract void ClientProcessMessage(BaseMessage message, ClientSharedStateObject sharedStateObj);
abstract public void ClientProcessMessage(ClientSharedStateObject SharedStateObj);
public Client(IPAddress iPAddress, int portNum) { tcpClient = new TcpClient(); try { tcpClient.Connect(iPAddress, portNum); SharedStateObj = new ClientSharedStateObject() { ContinueProcess = true, Ev = new AutoResetEvent(false), InBoundMessageQueue = new Queue <BaseMessage>(), OutBoundMessageQueue = new Queue <BaseMessage>() }; handlerDictionary = new Dictionary <Type, List <BaseMessageHandler> >(); #region Building message handling dictionary var packageHolder = ConfigurationManager.AppSettings["RulesPackages"].Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList(); packageHolder.Add("NetworkingCore"); List <Type> typeHolder = new List <Type>(); foreach (var currentPackage in packageHolder) { typeHolder.AddRange(Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + currentPackage + @".dll").GetTypes().ToList()); } List <BaseMessageHandler> handlerHolder = new List <BaseMessageHandler>(); foreach (var item in typeHolder) { if (item.BaseType != null && item.BaseType.Equals(typeof(BaseMessageHandler)) && !item.GetConstructor(Type.EmptyTypes).Equals(null)) { handlerHolder.Add((BaseMessageHandler)Activator.CreateInstance(item)); } } foreach (var item in handlerHolder) { if (!handlerDictionary.Keys.Contains(item.HandledMessageType)) { handlerDictionary.Add(item.HandledMessageType, new List <BaseMessageHandler>()); } handlerDictionary[item.HandledMessageType].Add(item); } #endregion Listener listener = new Listener(tcpClient); ThreadPool.QueueUserWorkItem(new WaitCallback(listener.Listen), SharedStateObj); MessageSender messageSender = new MessageSender(tcpClient); ThreadPool.QueueUserWorkItem(new WaitCallback(messageSender.SendMessages), SharedStateObj); } catch (SocketException e) { Console.WriteLine("Server not available!"); } catch (IOException e) { Console.WriteLine("Server not available!"); } catch (Exception e) { Console.WriteLine(e.ToString()); } }
public override void ClientProcessMessage(ClientSharedStateObject SharedStateObj) { SharedStateObj.ClientID = this.clientID; }