Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
0
 private void Logout(TCPServerClientInfo clientInfo)
 {
     lock (this.locker)
     {
         this.LoggedUsers.Remove(clientInfo);
     }
 }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
 public TCPServerInteractEventArgs(object message, TCPServerClientInfo clientInfo, bool keepAlive = true, bool callback = true)
 {
     this.Object     = message;
     this.KeepAlive  = keepAlive;
     this.CallBack   = callback;
     this.ClientInfo = clientInfo;
 }
Ejemplo n.º 5
0
        private TCPServerClientInfo AddSocket(Socket socket)
        {
            int threadId             = Thread.CurrentThread.ManagedThreadId;
            TCPServerClientInfo info = new TCPServerClientInfo();

            info.Socket = socket;
            info.Id     = this.Counter;
            this.Counter++;
            if (!socket.Connected)
            {
                info.Port      = this.EndPoint.Port.ToString();
                info.IpAddress = this.EndPoint.Address.ToString();
            }
            else
            {
                string endPoint            = socket.RemoteEndPoint.ToString();
                string expressionIpAddress = @"(\d)+\.(\d)+\.(\d)+\.(\d)+";
                string expressionPort      = @"(\d)+$";
                Regex  regex = new Regex(expressionIpAddress);
                info.IpAddress = regex.Match(endPoint).Value;
                regex          = new Regex(expressionPort);
                info.Port      = regex.Match(endPoint).Value;
                this.WatchDog(TCPServerMessages.ClientConnected, info);
            }
            this.Sockets.Add(threadId, info);
            return(info);
        }
Ejemplo n.º 6
0
        private void Connect(IAsyncResult state)
        {
            Socket baseSocket = state.AsyncState as Socket;
            Socket client     = null;

            try {
                client = baseSocket.EndAccept(state);
                TCPServerClientInfo clientInfo = this.AddSocket(client);
                this.NewThread();
                this.Interact(clientInfo);
            }
            catch (TCPServerInteractException ex) {
                this.WatchDog(TCPServerMessages.ClientFail, this.Sockets[Thread.CurrentThread.ManagedThreadId]);
            }
            catch (ObjectDisposedException ex) {
                this.WatchDog(TCPServerMessages.EndAccepting);
                this.CheckIfStopped();
            }
            catch (Exception ex) {
                this.WatchDog(TCPServerMessages.AcceptFail);
            }
            finally {
                if (client != null)
                {
                    client.Shutdown(SocketShutdown.Both);
                    this.RemoveSocket();
                    client.Close();
                }
            }
        }
Ejemplo n.º 7
0
 private User Login(TCPServerClientInfo clientInfo, User user)
 {
     lock (this.locker)
     {
         this.LoggedUsers.Add(clientInfo, user);
     }
     return(user);
 }
Ejemplo n.º 8
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();
            }
        }
Ejemplo n.º 9
0
        private void WatchDog(TCPServerMessages state, TCPServerClientInfo client = null)
        {
            if (state == TCPServerMessages.Undefined)
            {
                return;
            }
            string message = String.Empty;

            if (state == TCPServerMessages.Initialized)
            {
                message = "Initialized";
            }
            else if (state == TCPServerMessages.Started)
            {
                message = "Server started at " + this.EndPoint.Address.ToString() + " : " + this.EndPoint.Port.ToString();
            }
            else if (state == TCPServerMessages.Stopped)
            {
                message = "Stopped";
            }
            else if (state == TCPServerMessages.AddressFail)
            {
                message = "Ip address fail";
            }
            else if (state == TCPServerMessages.EndPointFail)
            {
                message = "Endpoint fail";
            }
            else if (state == TCPServerMessages.StartFail)
            {
                message = "Start fail";
            }
            else if (state == TCPServerMessages.NotInitialized)
            {
                message = "Not initialized";
            }
            else if (state == TCPServerMessages.AcceptFail)
            {
                message = "Accept fail";
            }
            else if (state == TCPServerMessages.ClientConnected)
            {
                message = "Client " + client.Id.ToString() + " connected";
            }
            else if (state == TCPServerMessages.ClientDisconnected)
            {
                message = "Client " + client.Id.ToString() + " disconnected";
            }
            else if (state == TCPServerMessages.ClientFail)
            {
                message = "Client " + client.Id.ToString() + " fail";
            }
            else if (state == TCPServerMessages.AlreadyInitialized)
            {
                message = "Server already initialized";
            }
            else if (state == TCPServerMessages.EndAccepting)
            {
                message = "End accepting sockets";
            }
            else if (state == TCPServerMessages.NoHandler)
            {
                message = "No server handler assigned";
            }
            else if (state == TCPServerMessages.ParseFail)
            {
                message = "Data parsing fail, client " + client.Id.ToString();
            }
            else if (state == TCPServerMessages.SocketLimit)
            {
                message = "Socket limit reached";
            }
            string fullMessage = DateTime.Now.ToUniversalTime() + " : " + message;

            this.MessageLog.Add(fullMessage);
            TCPServerMessageEventArgs argument = new TCPServerMessageEventArgs();

            argument.Message     = fullMessage;
            argument.MessageType = state;
            argument.ClientInfo  = client;
            if (this.ServerMessageEvent != null)
            {
                this.ServerMessageEvent(this, argument);
            }
        }
Ejemplo n.º 10
0
 public TCPServerMessageEventArgs(TCPServerMessages messageType, string message, TCPServerClientInfo clientInfo)
 {
     this.Message     = message;
     this.ClientInfo  = clientInfo;
     this.MessageType = messageType;
 }