/// <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 TgcSocketRecvMsg msg = TgcSocketMessages.receiveMessage(socket, TgcSocketMessageHeader.MsgType.InitialMessage); if (msg == null) { return(false); } //Respuesta del cliente //bool userOk = bool.Parse(msg.readString()); bool userOk = (bool)msg.readNext(); if (userOk) { //Habilitar estado de cliente para escuchar mensajes clientInfo.Status = TgcSocketClientInfo.ClientStatus.Connected; connectedClients.Add(clientInfo); //Guardar en la lista de nuevos clientes conectados newConnectedClients.Enqueue(clientInfo); } return(userOk); } 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 TgcSocketRecvMsg msg = TgcSocketMessages.receiveMessage(clientSocket, TgcSocketMessageHeader.MsgType.InitialMessage); if (msg == null) { return(false); } //Guardar sus datos y cambiar su estado TgcSocketInitialInfoServer serverInitInfo = (TgcSocketInitialInfoServer)msg.readNext(); serverInfo.Name = serverInitInfo.serverName; playerId = serverInitInfo.playerId; //Enviar OK final this.status = TgcSocketClientInfo.ClientStatus.Connected; TgcSocketSendMsg sendMsg = new TgcSocketSendMsg(); sendMsg.write(true); return(TgcSocketMessages.sendMessage(clientSocket, sendMsg, TgcSocketMessageHeader.MsgType.InitialMessage)); } catch (SocketException) { return(false); } }
/// <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 TgcSocketRecvMsg msg = TgcSocketMessages.receiveMessage(socket, TgcSocketMessageHeader.MsgType.InitialMessage); if (msg == null) { return(false); } //Guardar sus datos y cambiar su estado TgcSocketInitialInfoClient clientInitInfo = (TgcSocketInitialInfoClient)msg.readNext(); clientInfo.Name = clientInitInfo.clientName; clientInfo.Status = TgcSocketClientInfo.ClientStatus.WaitingClientOk; //Asignar Player ID a cliente TgcSocketInitialInfoServer serverInitInfo = new TgcSocketInitialInfoServer(); serverInitInfo.serverName = serverName; serverInitInfo.playerId = playerIdCounter; clientInfo.PlayerId = serverInitInfo.playerId; playerIdCounter++; //Enviar info inicial del server TgcSocketSendMsg sendMsg = new TgcSocketSendMsg(); sendMsg.write(serverInitInfo); TgcSocketMessages.sendMessage(socket, sendMsg, TgcSocketMessageHeader.MsgType.InitialMessage); return(true); } catch (SocketException) { return(false); } }
/// <summary> /// Recibe un mensaje de TGC por un socket /// </summary> /// <param name="socket">Socket del cual recibir</param> /// <param name="msgType">Tipo de mensaje esperado</param> /// <returns>Mensaje recibido o null si recibió mal</returns> public static TgcSocketRecvMsg receiveMessage(Socket socket, TgcSocketMessageHeader.MsgType msgType) { try { //Recibir header byte[] headerData = new byte[TgcSocketMessageHeader.HEADER_SIZE]; int recv = socket.Receive(headerData, headerData.Length, SocketFlags.None); if (recv == TgcSocketMessageHeader.HEADER_SIZE) { int msgLength = BitConverter.ToInt32(headerData, 0); //Recibir cuerpo del mensaje byte[] msgData = new byte[msgLength]; recv = socket.Receive(msgData, msgData.Length, SocketFlags.None); if (recv == msgLength) { TgcSocketRecvMsg recvMsg = new TgcSocketRecvMsg(msgData); return(recvMsg); } } } catch (Exception) { return(null); } return(null); }
/// <summary> /// Recibe un mensaje de TGC por un socket /// </summary> /// <param name="socket">Socket del cual recibir</param> /// <param name="msgType">Tipo de mensaje esperado</param> /// <returns>Mensaje recibido o null si recibió mal</returns> public static TgcSocketRecvMsg receiveMessage(Socket socket, TgcSocketMessageHeader.MsgType msgType) { try { //Recibir header byte[] headerData = new byte[TgcSocketMessageHeader.HEADER_SIZE]; int recv = socket.Receive(headerData, headerData.Length, SocketFlags.None); if (recv == TgcSocketMessageHeader.HEADER_SIZE) { int msgLength = BitConverter.ToInt32(headerData, 0); //Recibir cuerpo del mensaje byte[] msgData = new byte[msgLength]; recv = socket.Receive(msgData, msgData.Length, SocketFlags.None); if (recv == msgLength) { TgcSocketRecvMsg recvMsg = new TgcSocketRecvMsg(msgData); return recvMsg; } } } catch (Exception) { return null; } return null; }
/// <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 TgcSocketRecvMsg 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); } }
/// <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 TgcSocketRecvMsg 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); } }
public TgcSocketClientRecvMesg(TgcSocketRecvMsg msg, int playerId) { this.msg = msg; this.playerId = playerId; }