/// <summary> /// The callback method for socket's beginReceive method. A state machine that takes care of incoming strings. /// </summary> /// <param name="line"></param> /// <param name="payload"></param> private void RequestReceived(String line, object payload) { if (line.Trim().Length == 0 && contentLength > 0) { socket.BeginReceive(ProcessRequest, null, contentLength); } else if (line.Trim().Length == 0) { ProcessRequest(null); } else if (firstLine != null) { Match m = contentLengthPattern.Match(line); if (m.Success) { contentLength = int.Parse(m.Groups[1].ToString()); } socket.BeginReceive(RequestReceived, null); } else { firstLine = line; socket.BeginReceive(RequestReceived, null); } }
/// <summary> /// handles receiving http requests /// </summary> /// <param name="s"></param> /// <param name="p"></param> private void Received(string s, object p) { if (s.Trim().Length == 0 && contentLength > 0) { socket.BeginReceive(getProperRequest, null, contentLength); Console.WriteLine(s); return; } Match match = gameStatusPattern.Match(s); if (match.Success) { parseLine(s); socket.BeginReceive(getProperRequest, null); Console.WriteLine(s); return; } Console.WriteLine(s); for (int i = 0; i < s.Length; i++) { if (s[i] == '\r') { parseLine(s); socket.BeginReceive(Received, null); } Match m = contentLengthPattern.Match(s); if (m.Success) { contentLength = int.Parse(m.Groups[1].ToString()); } } }
private void ReadLines(String line, object p) { if (line.Trim().Length == 0 && contentLength > 0) // has contentLength header { ss.BeginReceive(ProcessRequest, null, contentLength); } else if (line.Trim().Length == 0) // No JSON object in request { ProcessRequest(null); } else if (firstLine != null) // if this is not the first line { Match m = contentLengthPattern.Match(line); if (m.Success) { contentLength = int.Parse(m.Groups[1].ToString()); } ss.BeginReceive(ReadLines, null); } else // this is the first line { firstLine = line; ss.BeginReceive(ReadLines, null); } }
private void ReadLines(String line, object p) { // End of request if (line.Trim().Length == 0 && contentLength > 0) { ss.BeginReceive(ProcessRequest, null, contentLength); } // No object at end of Request else if (line.Trim().Length == 0) { ProcessRequest(null); } // Middle Line: looking for contentLength else if (firstLine != null) { Match m = contentLengthPattern.Match(line); if (m.Success) { contentLength = int.Parse(m.Groups[1].ToString()); } ss.BeginReceive(ReadLines, null); } // First Line else { firstLine = line; ss.BeginReceive(ReadLines, null); } }
public void run(int port) { int LIMIT = 1000; int count = LIMIT; Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); List <int> lines = new List <int>(); for (int i = 0; i < LIMIT; i++) { lines.Add(-1); } StringSocket sender = null; SS receiver = null; try { sender = new StringSocket(s1, new UTF8Encoding()); receiver = new SS(s2, new UTF8Encoding()); for (int i = 0; i < LIMIT / 4; i++) { int j = i; receiver.BeginReceive((s, e, p) => { lock (lines) { lines[j] = Int32.Parse(s); } Interlocked.Decrement(ref count); }, null); } for (int i = 0; i < LIMIT / 2; i++) { sender.BeginSend(i.ToString() + "\n", (e, p) => { }, null); } for (int i = LIMIT / 4; i < 3 * LIMIT / 4; i++) { int j = i; receiver.BeginReceive((s, e, p) => { lock (lines) { lines[j] = Int32.Parse(s); } Interlocked.Decrement(ref count); }, null); } for (int i = LIMIT / 2; i < LIMIT; i++) { sender.BeginSend(i.ToString() + "\n", (e, p) => { }, null); } for (int i = 3 * LIMIT / 4; i < LIMIT; i++) { int j = i; receiver.BeginReceive((s, e, p) => { lock (lines) { lines[j] = Int32.Parse(s); Interlocked.Decrement(ref count); } }, null); } if (!SpinWait.SpinUntil(() => count == 0, 5000)) { Assert.Fail(); } for (int i = 0; i < LIMIT; i++) { Assert.AreEqual(i, lines[i]); } } finally { CloseSockets(server, sender, receiver); } }
public void run(int port) { Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); String line = ""; ManualResetEvent mre = new ManualResetEvent(false); StringSocket sender = null; SS receiver = null; try { sender = new StringSocket(s1, new UTF8Encoding()); receiver = new SS(s2, new UTF8Encoding()); StringBuilder text = new StringBuilder(); for (int i = 0; i < 100000; i++) { text.Append(i); } String str = text.ToString(); text.Append('\n'); sender.BeginSend(text.ToString(), (e, p) => { }, null); receiver.BeginReceive((s, e, p) => { line = s; mre.Set(); }, null); mre.WaitOne(); Assert.AreEqual(str, line); } finally { CloseSockets(server, sender, receiver); } }
public void run(int port) { Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); String line = ""; ManualResetEvent mre = new ManualResetEvent(false); StringSocket sender = null; SS receiver = null; try { sender = new StringSocket(s1, new UTF8Encoding()); receiver = new SS(s2, new UTF8Encoding()); foreach (char c in "Hello\n") { sender.BeginSend(c.ToString(), (e, p) => { }, null); } receiver.BeginReceive((s, e, p) => { line = s; mre.Set(); }, null); mre.WaitOne(); Assert.AreEqual("Hello", line); } finally { CloseSockets(server, sender, receiver); } }
/// <summary> /// creates a server and calls begin receive /// </summary> /// <param name="s"></param> public SocketComm(SS s) { socket = s; service = new BoggleService(); socket.BeginReceive(Received, null); }
public void run(int port) { Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); SS receiver = null; StringSocket sender = null; int LIMIT = 2; try { sender = new StringSocket(s1, new UTF8Encoding()); receiver = new SS(s2, new UTF8Encoding()); int count1 = LIMIT; int count2 = LIMIT; for (int i = 0; i < LIMIT; i++) { sender.BeginSend("Hello\n", (e, p) => { Interlocked.Decrement(ref count1); while (true) { ; } }, null); } for (int i = 0; i < LIMIT; i++) { receiver.BeginReceive((s, e, p) => { Interlocked.Decrement(ref count2); }, null); } if (!SpinWait.SpinUntil(() => count1 == 0 && count2 == 0, 5000)) { Assert.Fail(); } } finally { CloseSockets(server, sender, receiver); } }
public void run(int port) { int LIMIT = 1000; Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); List <int> lines = new List <int>(); StringSocket sender = null; SS receiver = null; try { sender = new StringSocket(s1, new UTF8Encoding()); receiver = new SS(s2, new UTF8Encoding()); for (int i = 0; i < LIMIT; i++) { receiver.BeginReceive((s, e, p) => { lock (lines) { lines.Add(Int32.Parse(s)); } }, null); } for (int i = 0; i < LIMIT; i++) { String s = i.ToString(); ThreadPool.QueueUserWorkItem(x => sender.BeginSend(s + "\n", (e, p) => { }, null)); } if (!SpinWait.SpinUntil(() => { lock (lines) { return(lines.Count == LIMIT); } }, 5000)) { Assert.Fail(); } lines.Sort(); for (int i = 0; i < LIMIT; i++) { Assert.AreEqual(i, lines[i]); } } finally { CloseSockets(server, sender, receiver); } }
public void run(int port) { int LIMIT = 1000; Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); String[] lines = new String[LIMIT]; ManualResetEvent mre = new ManualResetEvent(false); int count = 0; StringSocket sender = null; SS receiver = null; try { sender = new StringSocket(s1, new UTF8Encoding()); receiver = new SS(s2, new UTF8Encoding()); for (int i = 0; i < LIMIT; i++) { receiver.BeginReceive((s, e, p) => { lines[(int)p] = s; Interlocked.Increment(ref count); }, i); } for (int i = 0; i < LIMIT; i++) { sender.BeginSend(i.ToString() + "\n", (e, p) => { }, null); } if (!SpinWait.SpinUntil(() => count == LIMIT, 5000)) { Assert.Fail(); } for (int i = 0; i < LIMIT; i++) { Assert.AreEqual(i.ToString(), lines[i]); } } finally { CloseSockets(server, sender, receiver); } }
public void run(int port) { Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); String line = ""; ManualResetEvent mre = new ManualResetEvent(false); try { StringSocket sender = new StringSocket(s1, new UTF8Encoding()); SS receiver = new SS(s2, new UTF8Encoding()); foreach (char c in "Hello\n") { sender.BeginSend(c.ToString(), (e, p) => { }, null); } receiver.BeginReceive((s, e, p) => { line = s; mre.Set(); }, null); mre.WaitOne(); Assert.AreEqual("Hello", line); } finally { //CloseSockets(server, s1, s2); } }
public void run(int port) { Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); String line = ""; ManualResetEvent mre = new ManualResetEvent(false); try { StringSocket sender = new StringSocket(s1, new UTF8Encoding()); SS receiver = new SS(s2, new UTF8Encoding()); StringBuilder text = new StringBuilder(); for (int i = 0; i < 100000; i++) { text.Append(i); } String str = text.ToString(); text.Append('\n'); sender.BeginSend(text.ToString(), (e, p) => { }, null); receiver.BeginReceive((s, e, p) => { line = s; mre.Set(); }, null); mre.WaitOne(); Assert.AreEqual(str, line); } finally { //CloseSockets(server, s1, s2); } }
/// <summary> /// Creates a new Connection object with the given socket. /// </summary> /// <param name="socket"></param> public ClientConnection(SS s) { socket = s; contentLength = 0; socket.BeginReceive(RequestReceived, null); }
public RequestHandler(SS ss) { this.ss = ss; contentLength = 0; ss.BeginReceive(ReadLines, null); }
public void run(int port) { int LIMIT = 1000; Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); List<int> lines = new List<int>(); try { StringSocket sender = new StringSocket(s1, new UTF8Encoding()); SS receiver = new SS(s2, new UTF8Encoding()); for (int i = 0; i < LIMIT; i++) { receiver.BeginReceive((s, e, p) => { lock (lines) { lines.Add(Int32.Parse(s)); } }, null); } for (int i = 0; i < LIMIT; i++) { String s = i.ToString(); ThreadPool.QueueUserWorkItem(x => sender.BeginSend(s + "\n", (e, p) => { }, null)); } SpinWait.SpinUntil(() => { lock (lines) { return lines.Count == LIMIT; } }); lines.Sort(); for (int i = 0; i < LIMIT; i++) { Assert.AreEqual(i, lines[i]); } } finally { //CloseSockets(server, s1, s2); } }
public void run(int port) { int LIMIT = 1000; Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); String[] lines = new String[LIMIT]; ManualResetEvent mre = new ManualResetEvent(false); int count = 0; try { StringSocket sender = new StringSocket(s1, new UTF8Encoding()); SS receiver = new SS(s2, new UTF8Encoding()); for (int i = 0; i < LIMIT; i++) { receiver.BeginReceive((s, e, p) => { lines[(int)p] = s; Interlocked.Increment(ref count); }, i); } for (int i = 0; i < LIMIT; i++) { sender.BeginSend(i.ToString() + "\n", (e, p) => { }, null); } SpinWait.SpinUntil(() => count == LIMIT); for (int i = 0; i < LIMIT; i++) { Assert.AreEqual(i.ToString(), lines[i]); } } finally { //CloseSockets(server, s1, s2); } }