/// <summary>
        ///     Empezar el handshake con el server
        /// </summary>
        /// <returns>True si todo salio bien</returns>
        private bool doHandShake()
        {
            try
            {
                var serverHandshakeLength = Encoding.ASCII.GetBytes(TgcSocketServer.SERVER_HANDSHAKE).Length;
                var data = new byte[serverHandshakeLength];
                var recv = clientSocket.Receive(data, data.Length, SocketFlags.None);
                if (recv > 0 && recv == serverHandshakeLength)
                {
                    var msg = Encoding.ASCII.GetString(data, 0, recv);
                    if (msg.Equals(TgcSocketServer.SERVER_HANDSHAKE))
                    {
                        //Server correcto, enviar informacion inicial
                        Status = TgcSocketClientInfo.ClientStatus.RequireInitialInfo;
                        var clientInitInfo = new TgcSocketInitialInfoClient();
                        clientInitInfo.clientName = ClientName;

                        var sendMsg = new TgcSocketSendMsg();
                        sendMsg.write(clientInitInfo);
                        TgcSocketMessages.sendMessage(clientSocket, sendMsg,
                                                      TgcSocketMessageHeader.MsgType.InitialMessage);

                        return(true);
                    }
                }
            }
            catch (SocketException)
            {
                //Handshake incorrecto
                return(false);
            }

            return(false);
        }
示例#2
0
        /// <summary>
        ///     Recibir información inicial del cliente
        /// </summary>
        /// <returns>True si todo salio bien</returns>
        private bool getClientInitialInfo(TgcSocketClientInfo clientInfo, Socket socket)
        {
            try
            {
                //Recibir info inicial del cliente
                var msg = TgcSocketMessages.receiveMessage(socket, TgcSocketMessageHeader.MsgType.InitialMessage);
                if (msg == null)
                {
                    return(false);
                }

                //Guardar sus datos y cambiar su estado
                var clientInitInfo = (TgcSocketInitialInfoClient)msg.readNext();
                clientInfo.Name   = clientInitInfo.clientName;
                clientInfo.Status = TgcSocketClientInfo.ClientStatus.WaitingClientOk;

                //Asignar Player ID a cliente
                var serverInitInfo = new TgcSocketInitialInfoServer();
                serverInitInfo.serverName = ServerName;
                serverInitInfo.playerId   = playerIdCounter;
                clientInfo.PlayerId       = serverInitInfo.playerId;
                playerIdCounter++;

                //Enviar info inicial del server
                var sendMsg = new TgcSocketSendMsg();
                sendMsg.write(serverInitInfo);
                TgcSocketMessages.sendMessage(socket, sendMsg, TgcSocketMessageHeader.MsgType.InitialMessage);

                return(true);
            }
            catch (SocketException)
            {
                return(false);
            }
        }
        /// <summary>
        ///     Recibir informacion inicial del server
        /// </summary>
        /// <returns>True si todo salio bien</returns>
        private bool getServerInitialInfo()
        {
            try
            {
                //Recibir info inicial del server
                var msg = TgcSocketMessages.receiveMessage(clientSocket, TgcSocketMessageHeader.MsgType.InitialMessage);
                if (msg == null)
                {
                    return(false);
                }

                //Guardar sus datos y cambiar su estado
                var serverInitInfo = (TgcSocketInitialInfoServer)msg.readNext();
                ServerInfo.Name = serverInitInfo.serverName;
                PlayerId        = serverInitInfo.playerId;

                //Enviar OK final
                Status = TgcSocketClientInfo.ClientStatus.Connected;
                var sendMsg = new TgcSocketSendMsg();
                sendMsg.write(true);
                return(TgcSocketMessages.sendMessage(clientSocket, sendMsg,
                                                     TgcSocketMessageHeader.MsgType.InitialMessage));
            }
            catch (SocketException)
            {
                return(false);
            }
        }
示例#4
0
        /// <summary>
        ///     Recibir la confirmación final del cliente para empezar a recibir mensajes de la aplicación
        /// </summary>
        /// <returns>True si todo salio bien</returns>
        private bool getClientOkResponse(TgcSocketClientInfo clientInfo, Socket socket)
        {
            try
            {
                //Recibir respuesta final del cliente
                var msg = TgcSocketMessages.receiveMessage(socket, TgcSocketMessageHeader.MsgType.InitialMessage);
                if (msg == null)
                {
                    return(false);
                }

                //Respuesta del cliente
                //bool userOk = bool.Parse(msg.readString());
                var userOk = (bool)msg.readNext();
                if (userOk)
                {
                    //Habilitar estado de cliente para escuchar mensajes
                    clientInfo.Status = TgcSocketClientInfo.ClientStatus.Connected;
                    Clients.Add(clientInfo);

                    //Guardar en la lista de nuevos clientes conectados
                    newConnectedClients.Enqueue(clientInfo);
                }

                return(userOk);
            }
            catch (SocketException)
            {
                return(false);
            }
        }
示例#5
0
 /// <summary>
 ///     Enviar mensaje a cliente, solo si esta conectado
 /// </summary>
 private void sendToClient(TgcSocketClientInfo clientInfo, TgcSocketSendMsg msg)
 {
     if (clientInfo.Status == TgcSocketClientInfo.ClientStatus.Connected)
     {
         TgcSocketMessages.sendMessage(clientInfo.Socket, msg, TgcSocketMessageHeader.MsgType.RegularMessage);
     }
 }
        /// <summary>
        ///     Recibir mensaje del servidor
        /// </summary>
        /// <returns>True si todo salio bien, False en caso de problemas en la conexión</returns>
        private bool getReceiveMessage()
        {
            try
            {
                //Recibir mensaje
                var msg = TgcSocketMessages.receiveMessage(clientSocket, TgcSocketMessageHeader.MsgType.RegularMessage);
                if (msg == null)
                {
                    return(false);
                }

                //Agregar a la lista de mensajes pendientes
                receivedMessages.Enqueue(msg);

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
示例#7
0
        /// <summary>
        ///     Lee un mensaje ordinario recibido por el cliente
        /// </summary>
        /// <returns>True si todo salio bien</returns>
        private bool getReceiveMessage(TgcSocketClientInfo clientInfo, Socket socket)
        {
            try
            {
                //Recibir mensaje
                var msg = TgcSocketMessages.receiveMessage(socket, TgcSocketMessageHeader.MsgType.RegularMessage);
                if (msg == null)
                {
                    return(false);
                }

                //Agregar a la lista de mensajes pendientes
                receivedMessages.Enqueue(new TgcSocketClientRecvMesg(msg, clientInfo.PlayerId));

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
 /// <summary>
 ///     Enviar un mensaje al server
 /// </summary>
 /// <param name="msg">Mensaje a enviar</param>
 public void send(TgcSocketSendMsg msg)
 {
     TgcSocketMessages.sendMessage(clientSocket, msg, TgcSocketMessageHeader.MsgType.RegularMessage);
 }