private void PushDataToUser(MessageTypes type, TCPServerClientInfo clientInfo, User user, TCPServer server, byte[] binaryData = null) { Message msg = new Message(type, user, null, binaryData); TCPServerInteractEventArgs args = new TCPServerInteractEventArgs(msg, clientInfo, false, false); server.Send(args); }
private void PushMessageToUser(MessageTypes type, TCPServerClientInfo clientInfo, User user, TCPServer server, string message = "") { Message msg = new Message(type, user, message); TCPServerInteractEventArgs args = new TCPServerInteractEventArgs(msg, clientInfo, false, false); server.Send(args); }
private void GetObject <T>(TCPServerInteractEventArgs args) { string data = Encoding.UTF8.GetString(args.Bytes, 0, args.BytesCount); T dataObject = new JavaScriptSerializer().Deserialize <T>(data); args.Object = dataObject; }
public void Send(TCPServerInteractEventArgs args) { try { if (this.DataType != null) { this.SetObject(args); } int bytesCount = args.ClientInfo.Socket.Send(args.Bytes); } catch (Exception ex) { this.WatchDog(TCPServerMessages.ClientFail, args.ClientInfo); } }
private void Interact(TCPServerClientInfo clientInfo) { Socket client = clientInfo.Socket; bool keepAlive; try { do { byte[] bytes = new byte[this.BufferSize]; int bytesCount = client.Receive(bytes); TCPServerInteractEventArgs args = new TCPServerInteractEventArgs(); args.Bytes = bytes; args.BytesCount = bytesCount; args.ClientInfo = clientInfo; if (this.DataType != null) { MethodInfo method = typeof(TCPServer).GetMethod("GetObject", BindingFlags.Instance | BindingFlags.NonPublic); try { method.MakeGenericMethod(this.DataType).Invoke(this, new object[] { args }); } catch (Exception ex) { this.WatchDog(TCPServerMessages.ParseFail, this.Sockets[Thread.CurrentThread.ManagedThreadId]); } } if (this.ServerInteractEvent != null) { this.ServerInteractEvent(this, args); } if (args.CallBack) { if (this.DataType != null) { this.SetObject(args); } bytesCount = client.Send(args.Bytes); } keepAlive = args.KeepAlive; } while (keepAlive); } catch (Exception ex) { throw new TCPServerInteractException(); } }
public void InteractHandler(object o, TCPServerInteractEventArgs args) { Message message = args.Object as Message; User DbUser = this.Authenticate(message.User); TCPServer server = o as TCPServer; switch (message.MessageType) { case MessageTypes.login: if (DbUser != null) { this.Login(args.ClientInfo, DbUser); this.PushMessageToGroup(MessageTypes.group, DbUser, server, this.CountGroup(DbUser.Group)); args.Object = new Message(MessageTypes.login_success, DbUser); args.KeepAlive = true; args.CallBack = true; } else { args.KeepAlive = false; } break; case MessageTypes.logout: if (DbUser != null && this.LoggedIn(DbUser)) { this.Logout(args.ClientInfo); this.PushMessageToGroup(MessageTypes.group, DbUser, server, this.CountGroup(DbUser.Group)); args.Object = new Message(MessageTypes.logout_success, DbUser); args.KeepAlive = true; args.CallBack = true; } else { args.KeepAlive = false; } break; case MessageTypes.post: if (DbUser != null && this.LoggedIn(DbUser)) { this.PushMessageToGroup(MessageTypes.post, DbUser, server, message.Text); args.Object = new Message(MessageTypes.post_success, DbUser); args.KeepAlive = true; args.CallBack = true; } else { args.KeepAlive = false; } break; case MessageTypes.cast: if (DbUser != null && this.LoggedIn(DbUser)) { this.PushDataToGroup(MessageTypes.cast, DbUser, server, message.BinaryData); args.Object = new Message(MessageTypes.cast_success, DbUser); args.KeepAlive = true; args.CallBack = true; } else { args.KeepAlive = false; } break; case MessageTypes.cast_end: if (DbUser != null && this.LoggedIn(DbUser)) { this.PushMessageToGroup(MessageTypes.cast_end, DbUser, server); args.Object = new Message(MessageTypes.cast_end_success, DbUser); args.KeepAlive = true; args.CallBack = true; } else { args.KeepAlive = false; } break; case MessageTypes.mail: if (DbUser != null && this.LoggedIn(DbUser)) { this.Mail(); args.Object = new Message(MessageTypes.mail_success, DbUser); args.KeepAlive = true; args.CallBack = true; } else { args.KeepAlive = false; } break; default: args.KeepAlive = false; break; } }
private void SetObject(TCPServerInteractEventArgs args) { string serialized = new JavaScriptSerializer().Serialize(args.Object); args.Bytes = Encoding.UTF8.GetBytes(serialized); }