Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
 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);
     }
 }
Example #5
0
        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();
            }
        }
Example #6
0
        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;
            }
        }
Example #7
0
        private void SetObject(TCPServerInteractEventArgs args)
        {
            string serialized = new JavaScriptSerializer().Serialize(args.Object);

            args.Bytes = Encoding.UTF8.GetBytes(serialized);
        }