/// <summary> /// Reaction on something received /// </summary> /// <param name="instance">The instance.</param> /// <param name="args">The <see cref="aceRemoteInstanceBaseEventArgs"/> instance containing the event data.</param> public void received(aceRemoteInstanceBase instance, aceRemoteInstanceBaseEventArgs args) { string ip = args.socket.RemoteEndPoint.ToString(); log("Received [" + ip.ToString() + "]: " + args.message); string msg = args.message.Trim(); if (msg.Length > 4) { string cmd = msg.Substring(0, 3).ToUpper(); string par = msg.Substring(4).Trim(); switch (cmd) { case "RND": if (string.IsNullOrWhiteSpace(par)) { par = "5"; } int _rndTimes = int.Parse(par); Random random = new Random(); for (int ri = 0; ri < _rndTimes; ri++) { string rnd = imbSCI.Core.extensions.text.imbStringGenerators.getRandomString(32); //aceCommonExtensions.getRandomString(32); int rnt = random.Next(10) * 200; sendStack.Enqueue(new aceRemoteSendTask(rnd, rnt, args.socket)); } break; case "ECH": if (string.IsNullOrWhiteSpace(par)) { par = "[echo]"; } sendStack.Enqueue(new aceRemoteSendTask(par, 0, args.socket)); break; case "PNG": if (string.IsNullOrWhiteSpace(par)) { par = "5"; } int _pngTimes = int.Parse(par); for (int pi = 0; pi < _pngTimes; pi++) { sendStack.Enqueue(new aceRemoteSendTask("ping [" + pi.ToString("D3") + "/" + _pngTimes + "]", 200, args.socket)); } break; default: log("Unknown command [" + msg + "]"); break; } } }
protected void processStackLoop() { while (doProcessStackLoop) { byte[] rb = new byte[settings.bufferSize]; SocketError erc = SocketError.Success; StringBuilder sb = new StringBuilder(); bool doRepeat = true; Socket socket = client; while (doRepeat) { try { int brc = socket.Receive(rb, 0, settings.bufferSize, 0, out erc); if (brc > 0) { sb.Append(Encoding.ASCII.GetString(rb, 0, brc)); rb = new byte[settings.bufferSize]; } else { doRepeat = false; } } catch (Exception ex) { log("Receive exception:" + ex.Message); } } string inputData = sb.ToString().Trim(); // deljenje u vise linija if (!string.IsNullOrEmpty(inputData)) { if (inputData.Contains(settings.endMessageSufix)) { var lns = inputData.Split(settings.endMessageSufix.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (string ln in lns) { readStack.Enqueue(new aceRemoteReceiveMessage(ln, socket)); } } else { readStack.Enqueue(new aceRemoteReceiveMessage(inputData, socket)); } } if (!readStack.IsEmpty) { aceRemoteReceiveMessage st; bool poped = readStack.TryDequeue(out st); if (poped) { if (onClientReceived != null) { aceRemoteInstanceBaseEventArgs args = new aceRemoteInstanceBaseEventArgs(aceRemoteInstanceBaseEventType.clientReceive, st.message, st.socket); onClientReceived(this, args); } else { log("Processing not attached :: " + st.message); } poped = false; } } Thread.Sleep(1); } }
public void sending(aceRemoteInstanceBase instance, aceRemoteInstanceBaseEventArgs args) { log("-- sending[" + args.socket.RemoteEndPoint.ToString() + "] :: " + args.message); }