/// <summary> /// response for game status /// </summary> /// <param name="body"></param> /// <param name="gameid"></param> /// <param name="brief"></param> private void GetGameStatus(string body, string gameid, string brief) { HttpStatusCode httpStatus; GameInfo game; if (brief.Equals("yes")) { game = service.GetGameStatus(gameid, "yes", out httpStatus); } else { game = service.GetGameStatus(gameid, "no", out httpStatus); } string res = ("HTTP/1.1 " + (int)httpStatus + " " + httpStatus + "\r\n"); if ((int)httpStatus / 100 == 2) { string result = JsonConvert.SerializeObject(game); res += ("Content-Type: application/json\r\n"); res += ("Content-Length: " + Encoding.UTF8.GetByteCount(result) + "\r\n"); res += "\r\n"; res += result; } else { res += "\r\n"; } socket.BeginSend(res, (x, y) => { socket.Shutdown(SocketShutdown.Both); }, 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 receiver = null; SS sender = null; try { sender = new SS(s1, new UTF8Encoding()); receiver = new StringSocket(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, receiver, sender); } }
private void CreateUserRequest(string line) { // Check Name n = JsonConvert.DeserializeObject <Name>(line); User u = new User(n); User user = new BoggleService().CreateUser(u, out HttpStatusCode status); string result = CreateResult(user, status); ss.BeginSend(result, (x, y) => { ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, null); }
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); SS sender = null; StringSocket receiver = null; try { sender = new SS(s1, new UTF8Encoding()); receiver = new StringSocket(s2, new UTF8Encoding()); sender.BeginSend("Hello\n", (e, p) => { }, null); receiver.BeginReceive((s, e, p) => { line = s; mre.Set(); }, null); mre.WaitOne(); Assert.AreEqual("Hello", line); } finally { CloseSockets(server, receiver, sender); } }
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 receiver = null; SS sender = null; try { sender = new SS(s1, new UTF8Encoding()); receiver = new StringSocket(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, receiver, sender); } }
public void run(int port) { Socket s1, s2; TcpListener server; OpenSockets(port, out server, out s1, out s2); StringSocket receiver = null; SS sender = null; int LIMIT = 2; try { sender = new SS(s1, new UTF8Encoding()); receiver = new StringSocket(s2, new UTF8Encoding()); int count = LIMIT; for (int i = 0; i < LIMIT; i++) { sender.BeginSend("Hello\n", (e, p) => { }, null); } for (int i = 0; i < LIMIT; i++) { Task.Run( () => receiver.BeginReceive((s, e, p) => { Interlocked.Decrement(ref count); while (true) { ; } }, null)); } if (!SpinWait.SpinUntil(() => count == 0, 5000)) { Assert.Fail(); } } finally { CloseSockets(server, receiver, sender); } }
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 receiver = null; SS sender = null; try { sender = new SS(s1, new UTF8Encoding()); receiver = new StringSocket(s2, new UTF8Encoding()); for (int i = 0; i < LIMIT; i++) { ThreadPool.QueueUserWorkItem(x => receiver.BeginReceive((s, e, p) => { lock (lines) { lines.Add(Int32.Parse(s)); } }, null)); } for (int i = 0; i < LIMIT; i++) { sender.BeginSend(i.ToString() + "\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, receiver, sender); } }
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 receiver = null; SS sender = null; try { sender = new SS(s1, new UTF8Encoding()); receiver = new StringSocket(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, receiver, sender); } }
/// <summary> /// Handles the request after all relevant info has been parsed out /// </summary> /// <param name="line"></param> /// <param name="p"></param> private void ProcessRequest(string line, object p = null) { String result = ""; // this handles 'make user' request if (makeUserPattern.IsMatch(firstLine)) { UserNickames name = JsonConvert.DeserializeObject <UserNickames>(line); dynamic user = new BoggleService().Register(name, out HttpStatusCode status); result = ComposeResponse(user, status); } // this handles 'join game' request else if (joinGamePattern.IsMatch(firstLine)) { GameRequest request = JsonConvert.DeserializeObject <GameRequest>(line); JoinResponse response = new BoggleService().Join(request, out HttpStatusCode status); result = ComposeResponse(response, status); } // this handles 'update game status' with brief parameter on or off else if (updateNoBriefPattern.IsMatch(firstLine) || updateBriefPattern.IsMatch(firstLine)) { Match m; string gameID = ""; string briefParam = null; string brief = ""; // if brief parameter is not provided if (updateNoBriefPattern.Match(firstLine).Success) { m = updateNoBriefPattern.Match(firstLine); gameID = m.Groups[1].ToString(); } // or not provided, parse brief parameter if (updateBriefPattern.Match(firstLine).Success) { m = updateBriefPattern.Match(firstLine); // game ID is embedded in first group of regex pattern gameID = m.Groups[1].ToString(); // brief parameter is embedded in second group of regex pattern briefParam = m.Groups[2].ToString(); // remove irrelevent strings brief = briefParam.Substring(7); } GameStatus response; HttpStatusCode status; if (briefParam == null) { response = new BoggleService().Update(gameID, "No", out status); } else { response = new BoggleService().Update(gameID, brief, out status); } result = ComposeResponse(response, status); } // this handles playword request else if (playWordPattern.IsMatch(firstLine)) { string gameID = playWordPattern.Match(firstLine).Groups[1].ToString(); PlayRequest request = JsonConvert.DeserializeObject <PlayRequest>(line); PlayResponse response = new BoggleService().PlayWord(request, gameID, out HttpStatusCode status); result = ComposeResponse(response, status); } // this handles cancel game request else if (cancelPattern.IsMatch(firstLine)) { UserObject user = JsonConvert.DeserializeObject <UserObject>(line); new BoggleService().CancelJoinRequest(user, out HttpStatusCode status); result = ComposeResponse(null, status); } // capturing whatever string requests that does not match any of the above regex patterns else { result = "HTTP/1.1 " + "403" + " Forbidden" + "\r\n\r\n"; } socket.BeginSend(result, (x, y) => { socket.Shutdown(SocketShutdown.Both); }, null); }
private void ProcessRequest(string line, object p = null) { // Determine which service method to invoke from // Handle "create user" requests if (createUserPattern.IsMatch(firstLine)) { UserInfo user = JsonConvert.DeserializeObject <UserInfo>(line); user = new BoggleService().CreateUser(user, out HttpStatusCode status); String result = "HTTP/1.1 " + (int)status + " " + status + "\r\n"; if ((int)status / 100 == 2) // status is OK { string res = JsonConvert.SerializeObject(user); result += "Content-Length: " + Encoding.UTF8.GetByteCount(res) + "\r\n"; result += res; } result += "\r\n"; ss.BeginSend(result, (x, y) => { ss.Dispose(); //ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, null); } // Handle "Join game" request else if (joinGamePattern.IsMatch(firstLine)) { UserInfo user = JsonConvert.DeserializeObject <UserInfo>(line); GameInfo game = new BoggleService().JoinGame(user, out HttpStatusCode status); String result = "HTTP/1.1 " + (int)status + " " + status + "\r\n"; if ((int)status / 100 == 2) // status is OK { string res = JsonConvert.SerializeObject(game); result += "Content-Length: " + Encoding.UTF8.GetByteCount(res) + "\r\n"; result += res; } result += "\r\n"; ss.BeginSend(result, (x, y) => { ss.Dispose(); //ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, null); } // Handle Play word request else if (playWordPattern.IsMatch(firstLine)) { UserInfo user = JsonConvert.DeserializeObject <UserInfo>(line); string gameid = ""; foreach (char a in firstLine) { if (Int32.TryParse(a.ToString(), out int IdontCare)) { gameid += a.ToString(); } if (a == 'H') { break; } } WordPlayed wp = new BoggleService().PlayWord(user, gameid, out HttpStatusCode status); String result = "HTTP/1.1 " + (int)status + " " + status + "\r\n"; if ((int)status / 100 == 2) // status is OK { string res = JsonConvert.SerializeObject(wp); result += "Content-Length: " + Encoding.UTF8.GetByteCount(res) + "\r\n"; result += res; } result += "\r\n"; ss.BeginSend(result, (x, y) => { ss.Dispose(); //ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, null); } // Handle cancel join request else if (cancelJoinPattern.IsMatch(firstLine)) { UserInfo user = JsonConvert.DeserializeObject <UserInfo>(line); new BoggleService().CancelJoinRequest(user, out HttpStatusCode status); String result = "HTTP/1.1 " + (int)status + " " + status + "\r\n"; result += "\r\n"; ss.BeginSend(result, (x, y) => { ss.Dispose(); //ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, null); } // Handle game status request else if (gameStatusPattern.IsMatch(firstLine)) { string Brief = "hgf"; int briefIndex = firstLine.IndexOf("Brief"); if (briefIndex != -1) { if (firstLine.Substring(briefIndex + 6, 12) == "yes HTTP/1.1") { Brief = "yes"; } } string gameid = ""; foreach (char a in firstLine) { if (Int32.TryParse(a.ToString(), out int IdontCare)) { gameid += a.ToString(); } if (a == 'H') { break; } } GameInfo gi = new BoggleService().GameStatus(Brief, gameid, out HttpStatusCode status); String result = "HTTP/1.1 " + (int)status + " " + status + "\r\n"; if ((int)status / 100 == 2) // status is OK { string res = JsonConvert.SerializeObject(gi); result += "Content-Length: " + Encoding.UTF8.GetByteCount(res) + "\r\n"; result += res; } result += "\r\n"; ss.BeginSend(result, (x, y) => { ss.Dispose(); //ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, null); } else // handle invalid requests { String result = "HTTP/1.1 400 INVALID REQUEST\r\n\r\n"; ss.BeginSend(result, (x, y) => { ss.Dispose(); //ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, 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 { SS sender = new SS(s1, new UTF8Encoding()); StringSocket receiver = new StringSocket(s2, new UTF8Encoding()); for (int i = 0; i < LIMIT; i++) { ThreadPool.QueueUserWorkItem(x => receiver.BeginReceive((s, e, p) => { lock (lines) { lines.Add(Int32.Parse(s)); } }, null) ); } for (int i = 0; i < LIMIT; i++) { sender.BeginSend(i.ToString() + "\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 { SS sender = new SS(s1, new UTF8Encoding()); StringSocket receiver = new StringSocket(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); } }
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 { SS sender = new SS(s1, new UTF8Encoding()); StringSocket receiver = new StringSocket(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); } }
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 { SS sender = new SS(s1, new UTF8Encoding()); StringSocket receiver = new StringSocket(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); object payload = null; ManualResetEvent mre = new ManualResetEvent(false); try { SS sender = new SS(s1, new UTF8Encoding()); StringSocket receiver = new StringSocket(s2, new UTF8Encoding()); sender.BeginSend("Hello\n", (e, p) => { payload = p; mre.Set(); }, "Payload"); mre.WaitOne(); Assert.AreEqual("Payload", payload); } finally { //CloseSockets(server, s1, s2); } }