protected override void Disconnect(Event netEvent) { Debug.Log($"Client disconnected - ID: {netEvent.Peer.ID}, IP: {netEvent.Peer.IP} Reason: {netEvent.Data}"); Peer peer = netEvent.Peer; NetworkedObject nobj = null; if (m_peers.TryGetValue(peer.ID, out nobj)) { uint id = peer.ID; m_peers.Remove(peer.ID); Destroy(nobj.gameObject); // notify everyone else if (m_peers.Count > 0) { m_buffer.AddEntityHeader(peer, OpCodes.Destroy); var packet = m_buffer.GetPacketFromBuffer(PacketFlags.Reliable); var command = GameCommandPool.GetGameCommand(); command.Type = CommandType.BroadcastAll; command.Packet = packet; command.Channel = 0; m_commandQueue.Enqueue(command); } } }
private void HandlePacket(ref Event netEvent) { _packetsReceived++; var readBuffer = new byte[64]; var readStream = new MemoryStream(readBuffer); var reader = new BinaryReader(readStream); readStream.Position = 0; netEvent.Packet.CopyTo(readBuffer); var packetId = (NetworkEvents)reader.ReadByte(); DebugLog($"HandlePacket received: {_packetsReceived}"); if (packetId == NetworkEvents.UpdatePositionRequest) { var playerId = reader.ReadUInt32(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); var z = reader.ReadSingle(); var data = new TransformData { EventId = (byte)packetId, PlayerId = playerId, xPos = x, yPos = y, zRotation = z }; BroadcastPositionUpdateEvent(data); } }
private void HandleIncomingEvent(Event @event) { #if LOG_NETWORK m_Logger.LogDebug("Processing network event: " + @event.Type); #endif INetworkPeer networkPeer = null; if (@event.Peer.IsSet) { networkPeer = GetPeerByNetworkId(@event.Peer.ID, false); } switch (@event.Type) { case EventType.Connect: RegisterPeer(new NetworkPeer(@event.Peer)); break; case EventType.Timeout: case EventType.Disconnect: UnregisterPeer(networkPeer); break; } ENetNetworkEvent enetEvent = new ENetNetworkEvent(@event, networkPeer); m_EventBus.Emit(this, enetEvent); if (enetEvent.IsCancelled) { return; } m_NetworkEventProcessor.ProcessNetworkEvent(@event, networkPeer); }
private void HandleDisconnectEvent(Event netEvent) { #if UNITY_EDITOR Debug.Log("Client disconnected from server"); #endif HandleDisconnectClient(netEvent); }
private void HandleTimeoutEvent(Event netEvent) { #if UNITY_EDITOR Debug.Log("Client connection timeout"); #endif HandleDisconnectClient(netEvent); }
/// <summary> /// ENet Clients Callbacks /// </summary> void switch_callbacks(ENet.Event netEvent) { switch (netEvent.Type) { case ENet.EventType.None: break; case ENet.EventType.Connect: Debug.Log("Client connected to server"); ExecuteTrigger("Connect", netEvent); break; case ENet.EventType.Disconnect: Debug.Log("Client disconnected from server"); ExecuteTrigger("Disconnect", netEvent); break; case ENet.EventType.Timeout: Debug.Log("Client connection timeout"); ExecuteTrigger("Timeout", netEvent); break; case ENet.EventType.Receive: Debug.Log("Packet received from server - Channel ID: " + netEvent.ChannelID + ", Data length: " + netEvent.Packet.Length); ExecuteTriggerBytes(netEvent); netEvent.Packet.Dispose(); break; } }
private bool Service(ref ENetEvent @event) { switch (@event.Type) { case ENetEventType.None: return(false); case ENetEventType.Connect: HandleConnect(); return(true); case ENetEventType.Disconnect: HandleDisconnect(); return(true); case ENetEventType.Timeout: HandleTimeout(); return(true); case ENetEventType.Receive: Debug.Log("Packet received from server - Channel ID: " + @event.ChannelID + ", Data length: " + @event.Packet.Length); @event.Packet.Dispose(); return(true); } return(false); }
/// <summary> /// Add new Peer /// </summary> /// <returns>index of Peer</returns> public int AddPeer(ENet.Event net_event) { clients.Add(net_event.Peer); int index = clients.IndexOf(net_event.Peer); return(index); }
protected override void Disconnect(Event netEvent) { Debug.Log("Disconnect detected!"); if (Application.isEditor == false) { Application.Quit(); } }
private void HandleConnectEvent(Event netEvent) { #if UNITY_EDITOR Debug.Log("Client connected to server - ID: " + _peerServer.ID); #endif var packetReceivedEventArgs = new PacketReceivedEventArgs(); OnClientConnect(packetReceivedEventArgs); }
private void HandleEnetMessageReceived(Event netEvent, SendMode mode) { MessageBuffer message = MessageBuffer.Create(netEvent.Packet.Length); netEvent.Packet.CopyTo(message.Buffer); message.Offset = 0; message.Count = netEvent.Packet.Length; HandleMessageReceived(message, SendMode.Reliable); }
/// <summary> /// Remove new Peer /// </summary> /// <returns>index of Peer</returns> public int RemovePeer(ENet.Event net_event) { //Debug.LogError("Client delete"); int index = clients.IndexOf(net_event.Peer); clients.Remove(net_event.Peer); return(index); }
public int CheckEvents(out Event @event) { CheckCreated(); Native.ENetEvent nativeEvent; var ret = Native.enet_host_check_events(_host, out nativeEvent); if (ret <= 0) { @event = new Event(); return ret; } @event = new Event(nativeEvent); return ret; }
private void HandleReceiveEvent(ref Event netEvent) { #if UNITY_EDITOR Debug.Log("Packet received from server - Channel ID: " + netEvent.ChannelID + ", Data length: " + netEvent.Packet.Length); #endif byte[] packetBytes = new byte[netEvent.Packet.Length]; netEvent.Packet.CopyTo(packetBytes); var packetReceivedEventArgs = new PacketReceivedEventArgs(packetBytes); OnPacketReceived(packetReceivedEventArgs); netEvent.Packet.Dispose(); }
private void ParsePacket(ref ENet.Event netEvent) { Protocol protocol = new Protocol(); var readBuffer = new byte[1024]; netEvent.Packet.CopyTo(readBuffer); protocol.Deserialize(readBuffer, out PacketInfo packetInfo); Debug.Log("ParsePacket received: " + packetInfo.PacketId); if (packetInfo.PacketId == EPacketId.LoginResponse) { protocol.Deserialize(readBuffer, out Login login); playerId = login.PlayerId; Debug.Log(login); } else if (packetInfo.PacketId == EPacketId.LoginEvent) { protocol.Deserialize(readBuffer, out Login login); Player2Name.text = string.Concat(login.PlayerName); Player2Score.text = "0"; Player1Name.text = _localPlayerName; Player1Score.text = "0"; waiting_pannel.SetActive(false); StopCoroutine(waiting_animation); Debug.Log($"OtherPlayerId: { login.PlayerId }, OtherPlayerName: { login.PlayerName }"); } else if (packetInfo.PacketId == EPacketId.BoardUpdateEvent) { protocol.Deserialize(readBuffer, out GameUpdate gameUpdate); Player1Score.text = $"{(playerId == gameUpdate.Player1ID? gameUpdate.Player1Score : gameUpdate.Player2Score)}"; Player2Score.text = $"{(playerId == gameUpdate.Player1ID ? gameUpdate.Player2Score : gameUpdate.Player1Score)}"; bool myTurn = playerId == gameUpdate.PlayerTurn; Player1Name.gameObject.GetComponent <Outline>().enabled = myTurn; Player2Name.gameObject.GetComponent <Outline>().enabled = !myTurn; UpdateBoard(gameUpdate.Board); } else if (packetInfo.PacketId == EPacketId.LogoutEvent) { protocol.Deserialize(readBuffer, out Login login); Debug.Log($"{string.Concat(login.PlayerName)} was disconnected!"); } }
protected override void ProcessPacket(Event netEvent) { byte channel = netEvent.ChannelID; m_buffer = netEvent.Packet.GetBufferFromPacket(m_buffer); var buffer = m_buffer; var header = m_buffer.GetEntityHeader(); var op = header.OpCode; var id = header.ID; NetworkedObject nobj = null; switch (op) { case OpCodes.Spawn: nobj = SpawnNetworkedObject(id, buffer); break; case OpCodes.BulkSpawn: var cnt = m_buffer.ReadInt(); for (int i = 0; i < cnt; i++) { header = m_buffer.GetEntityHeader(); SpawnNetworkedObject(header.ID, buffer); } break; case OpCodes.Destroy: if (m_peers.TryGetValue(id, out nobj) && nobj.ID == id) { m_peers.Remove(id); Destroy(nobj.gameObject); } break; case OpCodes.PositionUpdate: case OpCodes.SyncUpdate: if (m_peers.TryGetValue(id, out nobj)) { nobj.ProcessPacket(op, buffer); } else { Debug.LogWarning($"Unable to locate entity ID: {id}"); } break; } }
public bool Connect(IPEndPoint serverAddress) { client.Connect(serverAddress, 0, 2); ENet.Event e = new ENet.Event(); if (client.Service(CONNECTIONTIMEOUT, out e) && e.Type == ENet.EventType.Connect) { Console.Out.WriteLine("Successful connection to " + serverAddress.Address.ToString() + ":" + serverAddress.Port); server = e.Peer; listeningThread = new Thread(this.listen); listeningThread.Start(); return true; } else { Console.Out.WriteLine("Connection failure to " + serverAddress.Address.ToString() + ":" + serverAddress.Port); return false; } }
protected override void ProcessPacket(Event netEvent) { Profiler.BeginSample("Process Packet"); //Debug.Log($"Packet received from - ID: {netEvent.Peer.ID}, IP: {netEvent.Peer.IP}, Channel ID: {netEvent.ChannelID}, Data Length: {netEvent.Packet.Length}"); m_buffer = netEvent.Packet.GetBufferFromPacket(m_buffer); var buffer = m_buffer; var header = buffer.GetEntityHeader(); var op = header.OpCode; var id = header.ID; if (netEvent.Peer.ID != id) { Debug.LogError($"ID Mismatch! {netEvent.Peer.ID} vs. {id}"); Profiler.EndSample(); return; } switch (op) { case OpCodes.PositionUpdate: Profiler.BeginSample("Process Packet - Position Update"); var command = GameCommandPool.GetGameCommand(); command.Type = CommandType.BroadcastOthers; command.Source = netEvent.Peer; command.Channel = 1; command.Packet = netEvent.Packet; m_commandQueue.Enqueue(command); NetworkedObject nobj = null; if (m_peers.TryGetValue(netEvent.Peer.ID, out nobj)) { nobj.ProcessPacket(op, buffer); } Profiler.EndSample(); break; default: netEvent.Packet.Dispose(); break; } Profiler.EndSample(); }
private void ParsePacket(ref ENet.Event netEvent) { var readBuffer = new byte[1024]; var readStream = new MemoryStream(readBuffer); var reader = new BinaryReader(readStream); readStream.Position = 0; netEvent.Packet.CopyTo(readBuffer); var packetId = (PacketId)reader.ReadByte(); Debug.Log("ParsePacket received: " + packetId); if (packetId == PacketId.LoginResponse) { _myPlayerId = reader.ReadUInt32(); Debug.Log("MyPlayerId: " + _myPlayerId); } else if (packetId == PacketId.LoginEvent) { var playerId = reader.ReadUInt32(); Debug.Log("OtherPlayerId: " + playerId); SpawnOtherPlayer(playerId); } else if (packetId == PacketId.PositionUpdateEvent) { var playerId = reader.ReadUInt32(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); UpdatePosition(playerId, x, y); } else if (packetId == PacketId.LogoutEvent) { var playerId = reader.ReadUInt32(); if (_players.ContainsKey(playerId)) { Destroy(_players[playerId]); _players.Remove(playerId); } } }
/// <summary> /// ENet Server Callbacks /// </summary> void switch_callbacks(ENet.Event netEvent) { switch (netEvent.Type) { case ENet.EventType.None: { break; } case ENet.EventType.Connect: { //Debug.Log("Client connected - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP); ExecuteTrigger("Connect", netEvent); break; } case ENet.EventType.Disconnect: { //Debug.Log("Client disconnected - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP); ExecuteTrigger("Disconnect", netEvent); break; } case ENet.EventType.Timeout: { //Debug.Log("Client timeout - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP); ExecuteTrigger("Timeout", netEvent); break; } case ENet.EventType.Receive: { //Debug.Log("Packet received from - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP + ", Channel ID: " + netEvent.ChannelID + ", Data length: " + netEvent.Packet.Length); ExecuteTriggerBytes(netEvent); netEvent.Packet.Dispose(); break; } } }
void HandleDisconnection(Event netEvent) { Console.WriteLine("Client: " + netEvent.Peer.IP + netEvent.Peer.Port + " disconnected."); connections[netEvent.Peer].OnDisconnect(); connections.Remove(netEvent.Peer); }
protected unsafe void listen() { ENet.Event e = new ENet.Event(); while (!end) { client.Service(TIMEOUT, out e); //Console.Out.WriteLine("Message received. Type : " + e.Type); switch (e.Type) { // needs more error handling case ENet.EventType.Connect: break; case ENet.EventType.Disconnect: server = new ENet.Peer(); end = true; // no thread join in this case, fix ? Console.Out.WriteLine("Connection closed by server"); break; case ENet.EventType.Receive: //String message = new String((sbyte*)e.Packet.Data.ToPointer(), 0, e.Packet.Length); byte[] bytes = new byte[e.Packet.Length]; for (int i = 0; i < e.Packet.Length; i++) { bytes[i] = *((byte*)(e.Packet.Data.ToPointer())+i); } dispatchMessage(bytes); break; case ENet.EventType.None: break; } } }
private void HandleServerEvent(Event networkEvent) { var newConnectionID = serverConnectionCnt; switch (networkEvent.Type) { case EventType.Connect: if (m_TransportVerbosity > TransportVerbosity.SilenceIsGolden) { Log($"Ignorance Transport: New client connection to server. Peer ID: {networkEvent.Peer.ID}, IP: {networkEvent.Peer.IP}"); } // Map them into our dictonaries. knownPeersToConnIDs.Add(networkEvent.Peer, newConnectionID); knownConnIDToPeers.Add(serverConnectionCnt, networkEvent.Peer); if (m_TransportVerbosity > TransportVerbosity.SilenceIsGolden) { Log($"Ignorance Transport: Peer ID {networkEvent.Peer.ID} is now known as connection ID {serverConnectionCnt}."); } OnServerConnected.Invoke(serverConnectionCnt); // Increment the connection counter. serverConnectionCnt++; break; case EventType.Disconnect: if (knownPeersToConnIDs.TryGetValue(networkEvent.Peer, out var deadPeerConnID)) { if (m_TransportVerbosity > TransportVerbosity.SilenceIsGolden) { Log($"Ignorance Transport: Connection ID {knownPeersToConnIDs[networkEvent.Peer]} has disconnected."); } OnServerDisconnected.Invoke(deadPeerConnID); PeerDisconnectedInternal(networkEvent.Peer); } else { if (m_TransportVerbosity > TransportVerbosity.SilenceIsGolden) { LogWarning($"Ignorance Transport: Unknown Peer with ID {networkEvent.Peer.ID} has disconnected. Hmm..."); } } break; case EventType.Receive: if (m_TransportVerbosity > TransportVerbosity.Chatty) { Log($"Ignorance Transport: Server data channel {networkEvent.ChannelID} receiving a {networkEvent.Packet.Length} byte payload"); } // Only process data from known peers. if (knownPeersToConnIDs.TryGetValue(networkEvent.Peer, out var knownConnectionID)) { NewMessageDataProcessor(networkEvent.Packet, true, knownConnectionID); } else { // Emit a warning and clean the packet. We don't want it in memory. networkEvent.Packet.Dispose(); if (m_TransportVerbosity > TransportVerbosity.Chatty) { LogWarning("Ignorance Transport WARNING: Discarded a packet because it was from a unknown peer. " + "If you see this message way too many times then you are likely a victim of a DoS or DDoS attack that is targeting your server's connection port." + " Ignorance will keep discarding packets but please do look into this. Failing to do so is risky and could potentially crash the server instance!"); } } break; case EventType.Timeout: // A client timed out. Note that this could be the same as the disconnected, but for now I'm going to seperate them for debugging reasons if (knownPeersToConnIDs.TryGetValue(networkEvent.Peer, out var timedOutConnID)) { if (m_TransportVerbosity > TransportVerbosity.SilenceIsGolden) { Log($"Ignorance Transport: Connection ID {knownPeersToConnIDs[networkEvent.Peer]} has timed out."); } OnServerDisconnected.Invoke(timedOutConnID); PeerDisconnectedInternal(networkEvent.Peer); } else { if (m_TransportVerbosity > TransportVerbosity.SilenceIsGolden) { LogWarning($"Ignorance Transport: Unknown Peer with ID {networkEvent.Peer.ID} has timed out. Hmm..."); } } break; } }
public int Service(int timeout, out Event @event) { if (timeout < 0) { throw new ArgumentOutOfRangeException("timeout"); } CheckCreated(); Native.ENetEvent nativeEvent; var ret = Native.enet_host_service(_host, out nativeEvent, (uint) timeout); if (ret <= 0) { @event = new Event(); return ret; } @event = new Event(nativeEvent); return ret; }
private void ParsePacket(ref ENet.Event netEvent) { var readBuffer = new byte[1024]; var readStream = new MemoryStream(readBuffer); var reader = new BinaryReader(readStream); readStream.Position = 0; netEvent.Packet.CopyTo(readBuffer); var packetId = (PacketId)reader.ReadByte(); //Debug.Log("ParsePacket received: " + packetId); if (packetId == PacketId.LoginResponse) { _myPlayerId = reader.ReadUInt32(); Debug.Log("MyPlayerId: " + _myPlayerId); } else if (packetId == PacketId.LoginEvent) { var playerId = reader.ReadUInt32(); Debug.Log("OtherPlayerId: " + playerId); SpawnOtherPlayer(playerId); } else if (packetId == PacketId.PositionAndRotationUpdateEvent) { var playerId = reader.ReadUInt32(); //LEO POSICIONES var posX = reader.ReadSingle(); var posY = reader.ReadSingle(); var posZ = reader.ReadSingle(); //LEO ROTACION var rotX = reader.ReadSingle(); var rotY = reader.ReadSingle(); var rotZ = reader.ReadSingle(); var rotPivotWeaponX = reader.ReadSingle(); var rotPivotWeaponY = reader.ReadSingle(); var rotPivotWeaponZ = reader.ReadSingle(); UpdatePosition(playerId, posX, posY, posZ); UpdateRotation(playerId, rotX, rotY, rotZ); UpdateRotationPivotWeapon(playerId, rotPivotWeaponX, rotPivotWeaponY, rotPivotWeaponZ); } else if (packetId == PacketId.LogoutEvent) { var playerId = reader.ReadUInt32(); if (_players.ContainsKey(playerId)) { Destroy(_players[playerId].myPrefab); _players.Remove(playerId); } } else if (packetId == PacketId.SpawnBulletEvent) { var playerId = reader.ReadUInt32(); SpawnBulletOtherPlayer(playerId); } else if (packetId == PacketId.CollisionBulletTrue) { Debug.Log("PEGUE :D"); } else if (packetId == PacketId.CollisionBulletFalse) { Debug.Log("NO PEGUE UNA GOMA D:"); } }
protected override void Connect(Event netEvent) { //throw new NotImplementedException(); }
private void HandleDisconnectClient(Event netEvent) { var packetReceivedEventArgs = new PacketReceivedEventArgs(); OnClientDisconnect(packetReceivedEventArgs); }
protected abstract void Connect(Event netEvent);
protected abstract void Disconnect(Event netEvent);
protected abstract void ProcessPacket(Event netEvent);
protected override void Connect(Event netEvent) { Debug.Log($"Client connected - ID: {netEvent.Peer.ID}, IP: {netEvent.Peer.IP}"); SpawnRemotePlayer(netEvent.Peer); }
private void HandlePacket(ref ENet.Event netEvent) { try { var readBuffer = new byte[1024]; var readStream = new MemoryStream(readBuffer); var reader = new BinaryReader(readStream); readStream.Position = 0; netEvent.Packet.CopyTo(readBuffer); var packetID = (PacketType)reader.ReadByte(); if (packetID == PacketType.ServerPositionUpdate) { //Debug.Log("Received Server Position Update"); var oID = reader.ReadUInt32(); var oX = reader.ReadSingle(); var oY = reader.ReadSingle(); //Debug.Log($"ID: {oID}, X: {oX}, Y: {oY}"); if (GameRoom.clients.ContainsKey(oID)) { if (GameRoom.clients[oID] == null) { Debug.LogWarning("oClient is null"); GameRoom.clients.Remove(oID); } else { //Debug.Log($"Updated position for other client ID '{oID}' x: {oX}, y: {oY}"); GameRoom.clients[oID].transform.position = new Vector2(oX, oY); return; } } if (oID == myID) // myID being the ID of THIS client { // This is just a safeguard, this was caused before because the server was using a Dict<> instead of a List<> causing the server position queue to not be in sync Debug.LogWarning("Received position update for THIS client. Ignoring.."); return; } GameRoom.CreateOtherClient(oID, oX, oY); } if (packetID == PacketType.ServerClientDisconnected) { var id = reader.ReadUInt32(); GameRoom.clients.Remove(id); Destroy(GameObject.Find($"oClient {id}")); Debug.Log($"Client {id} disconnected"); } } catch (ArgumentOutOfRangeException) { Console.WriteLine($"Received packet but buffer was too long. {netEvent.Packet.Length}"); } }
private void ParsePacket(ref ENet.Event netEvent) { var readBuffer = new byte[TAM_BUFFER]; var readStream = new MemoryStream(readBuffer); var reader = new BinaryReader(readStream); readStream.Position = 0; netEvent.Packet.CopyTo(readBuffer); var packetId = (PacketId)reader.ReadByte(); Debug.Log("ParsePacket received: " + packetId); if (packetId == PacketId.LoginResponse) { _myPlayerId = reader.ReadUInt32(); _myClient = new Client(_myPlayerId, -1, 0, myAlias, -1, false, false); Debug.Log("MyPlayerId: " + _myPlayerId); } else if (packetId == PacketId.LoginEvent) { var playerId = reader.ReadUInt32(); Debug.Log("OtherPlayerId: " + playerId); //SpawnOtherPlayer(playerId); } else if (packetId == PacketId.LogoutEvent) { var playerId = reader.ReadUInt32(); if (_players.ContainsKey(playerId)) { Destroy(_players[playerId]); _players.Remove(playerId); } } else if (packetId == PacketId.TestMensaggeEvent) { var playerId = reader.ReadUInt32(); Debug.Log("RESPUESTA DEL SERVIDOR: Mensaje recibido desde Id " + playerId); } else if (packetId == PacketId.CountRoomsEvent) { var playerId = reader.ReadUInt32(); countRooms = reader.ReadInt32(); if (countRooms > 0 && requestCountRooms) { requestCountRooms = false; _roomsData.Clear(); for (int i = 0; i < countRooms; i++) { _roomsData.Add(new RoomsData("Sin nombre", 0, 0)); Debug.Log("Creada room " + (i + 1)); } delayRequestDataCanvasLobby = 0; } Debug.Log("Cantidad de Rooms: " + countRooms); } else if (packetId == PacketId.DataRoomsUpdateEvent) { var playerId = reader.ReadUInt32(); var nameRoom = reader.ReadString(); var countPlayersInThisRoom = reader.ReadInt32(); var maxPlayersInThisRoom = reader.ReadInt32(); var ID_Room = reader.ReadInt32(); if (ID_Room < _roomsData.Count && ID_Room >= 0) { _roomsData[ID_Room].nameRoom = nameRoom; _roomsData[ID_Room].currentPlayers = countPlayersInThisRoom; _roomsData[ID_Room].maxPlayers = maxPlayersInThisRoom; _roomsNames[ID_Room].text = "Sala " + (ID_Room + 1) + "\n" + "Jugadores conectados " + _roomsData[ID_Room].currentPlayers + "/" + _roomsData[ID_Room].maxPlayers; } } else if (packetId == PacketId.DataWaitReadyRoomEvent) { var playerID = reader.ReadUInt32(); var otherPlayerReady = reader.ReadBoolean(); var otherPlayerAlias = reader.ReadString(); countPlayersInRoom = reader.ReadInt32(); var ID_RoomConecteed = reader.ReadInt32(); if (_myPlayerId != playerID && ID_RoomConecteed == _myClient.ID_RoomConnect && ID_RoomConecteed != ID_ROOM_INVALIDO) { if (otherPlayerReady) { readyImage_OtherPlayer.color = colorReady; } else { readyImage_OtherPlayer.color = colorNotReady; } currentOtherPlayerAlias = otherPlayerAlias; if (countPlayersInRoom <= 1) { aliasOtherPlayer_text.text = "Falta Jugador..."; } else { aliasOtherPlayer_text.text = otherPlayerAlias; } readyForPlaying_otherPlayer = otherPlayerReady; playersConnected_text.text = "Jugadores conectados: " + countPlayersInRoom + "/2"; } } else if (packetId == PacketId.DisconnectRoomEvent) { var playerId = reader.ReadUInt32(); var ID_RoomConnect = reader.ReadInt32(); var ID_InRoom = reader.ReadUInt32(); if (playerId == _myClient.ID) { ClearDataDisconnect(ID_RoomConnect, ID_InRoom); } } else if (packetId == PacketId.DataTurnEvent) { var playerId = reader.ReadUInt32(); var _isMyTurn = reader.ReadBoolean(); Debug.Log(playerId + " == " + _myClient.ID); if (playerId == _myClient.ID) { SwitchTurn(_isMyTurn); nameTurn_text.gameObject.SetActive(true); } } else if (packetId == PacketId.InputUpdateEvent) { var playerID = reader.ReadUInt32(); var ID = reader.ReadUInt32(); var ID_RoomConnect = reader.ReadInt32(); var ID_InRoom = reader.ReadUInt32(); var alias = reader.ReadString(); var input = reader.ReadInt32(); var isMyTurn = reader.ReadBoolean(); var inputOK = reader.ReadBoolean(); if (playerID == _myClient.ID && UPDATE_DATA_DISCONNECT == input) { _myClient.ID_InRoom = ID_InRoom; ClearDataDisconnect(ID_RoomConnect, ID_InRoom); _myClient.input = NADA_NUEVO; result = "GANASTE :D"; nameTurn_text.text = result; gameOver = true; buttonContinue.gameObject.SetActive(true); readyForPlaying_myPlayer = false; readyForPlaying_otherPlayer = false; SendDataWaitReadyRoomRequest(); } if (_myClient.input == CONECTAR_A_LA_ROOM && input == INPUT_VALIDO && playerID == _myClient.ID) { SendDataRoomRequest(); NextCanvas(3); _myClient.input = NADA_NUEVO; _myClient.ID_InRoom = ID_InRoom; //Debug.Log(_myClient.ID_InRoom); } else if (_myClient.input == CONECTAR_A_LA_ROOM && input == INPUT_INVALIDO && playerID == _myClient.ID) { NextCanvas(1); _myClient.input = NADA_NUEVO; } else if (ID_RoomConnect == _myClient.ID_RoomConnect) { if ((input == INPUT_EMPATO_PARTIDA || input == INPUT_GANO_PARTIDA || input == INPUT_PERDIO_PARTIDA) && playerID == _myClient.ID) { Debug.Log("TERMINO PARTIDA"); gameOver = true; buttonContinue.gameObject.SetActive(true); readyForPlaying_myPlayer = false; readyForPlaying_otherPlayer = false; SendDataWaitReadyRoomRequest(); switch (input) { case INPUT_EMPATO_PARTIDA: result = "EMPATE !"; break; case INPUT_GANO_PARTIDA: result = "GANASTE :D"; AddScore(ref myScore, ref myScore_text); break; case INPUT_PERDIO_PARTIDA: result = "PERDISTE :'c"; AddScore(ref enemyScore, ref enemyScore_text); break; } } else { if (ID_InRoom == _myClient.ID_InRoom) { if (_myClient.input == JUGAR_POSICION_0_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[0].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_1_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[1].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_2_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[2].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_3_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[3].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_4_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[4].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_5_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[5].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_6_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[6].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_7_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[7].transform); SwitchTurn(isMyTurn); } else if (_myClient.input == JUGAR_POSICION_8_DEL_TABLERO && input == INPUT_VALIDO) { //MI JUGADA Instantiate(myToken, slots[8].transform); SwitchTurn(isMyTurn); } } else if (ID_InRoom != _myClient.ID_InRoom) { if (input == JUGAR_POSICION_0_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[0].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_1_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[1].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_2_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[2].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_3_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[3].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_4_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[4].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_5_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[5].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_6_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[6].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_7_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[7].transform); SwitchTurn(isMyTurn); } else if (input == JUGAR_POSICION_8_DEL_TABLERO) { //JUGADA DEL CONTRINCANTE Instantiate(enemyToken, slots[8].transform); SwitchTurn(isMyTurn); } } } input = NADA_NUEVO; } //HACER QUE LA DATA DE LA UI DE LAS ROOMS SE ACTUALICE EN BASE A LO QUE LE CORRESPONDE: //- CANVAS PARA ELEGIR FICHA QUE VAYA ANTES DEL CANVAS DE CanvasWaitReadyRoom Y DESPUES DEL CanvasChargeRoom //- TERMINAR EL FLOW DE NIVELES (HACER QUE DEL CanvasLoby PASE a CanvasChargeRoom PASE a CanvasElegirFicha PASE a CanvasWaitReadyRoom // Y DESPUES pase al CanvasRoom donde empezara la partida) //- SALA CON SU NUMERO //- NOMBRES DE JUGADORES //- CANTIDAD DE JUGADORES CONECTADOS //- SI EL JUGADOR ESTA LISTO O NO. //- FUNCIONES DE LOS BOTONES //- FUCIONALIDAD DE LOS BOTONES PARA COLOCAR LA FICHA //- PUNTAJE DE CADA JUGADOR //- DE QUIEN ES EL TURNO. //- FUNCIONALIDAD DEL CANVAS PARA SELECCIONAR FICHA. //TAREAS DE CONEXION PENDIENTES: //- CUANDO ME RETIRO DE LA ROOM QUE SE DESCONECTE DE ESTA Y VUELVA AL LOBY //- CUANDO CIERRO EL JUEGO ME DESCONECTO COMPLETAMENTE (DE LA ROOM Y DEL LOBY). //- CUANDO SALGO AL MODO OFFLINE ME DESCONECTO COMPLETAMENTE (DE LA ROOM Y DEL LOBY). } }
private void ParsePacket(ref ENet.Event netEvent) { var readBuffer = new byte[8000000]; var readStream = new MemoryStream(readBuffer); var reader = new BinaryReader(readStream); readStream.Position = 0; netEvent.Packet.CopyTo(readBuffer); var packetId = (PacketId)reader.ReadByte(); //Debug.Log("ParsePacket received: " + packetId); if (packetId == PacketId.LoginResponse) { _myPlayerId = reader.ReadUInt32(); Debug.Log("MyPlayerId: " + _myPlayerId); } else if (packetId == PacketId.LoginEvent) { var playerId = reader.ReadUInt32(); Debug.Log("OtherPlayerId: " + playerId); SpawnOtherPlayer(playerId); } else if (packetId == PacketId.PositionUpdateEvent) { var playerId = reader.ReadUInt32(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); var z = reader.ReadSingle(); //print($"ID: {playerId}, Pos: {x}, {y}, {z}"); UpdatePosition(playerId, x, y, z); } else if (packetId == PacketId.PlayerPositionUpdateEvent) { var playerId = reader.ReadUInt32(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); var z = reader.ReadSingle(); // Quaternion var xq = reader.ReadSingle(); var yq = reader.ReadSingle(); var zq = reader.ReadSingle(); var wq = reader.ReadSingle(); //print($"ID: {playerId}, Pos: {x}, {y}, {z}"); UpdatePlayerPosition(playerId, x, y, z, xq, yq, zq, wq); } else if (packetId == PacketId.LogoutEvent) { var playerId = reader.ReadUInt32(); if (_players.ContainsKey(playerId)) { Destroy(_players[playerId]); _players.Remove(playerId); } } else if (packetId == PacketId.ChangeStatusEvent) { var playerId = reader.ReadUInt32(); if (playerId != _myPlayerId) { myControl = false; } else { myControl = true; } } else if (packetId == PacketId.ChangeColorEvent) { var playerId = reader.ReadUInt32(); float red = (float)reader.ReadSingle(); float green = (float)reader.ReadSingle(); float blue = (float)reader.ReadSingle(); print($"color: {red}, {green}, {blue}"); ballMaterial.color = new Color(red, green, blue, 1); } else if (packetId == PacketId.AudioEvent) { var playerId = reader.ReadUInt32(); var size = reader.ReadInt32(); byte[] audio = reader.ReadBytes(size); print("Audio Received here"); if (playerId == _myPlayerId) { return; } var samples = new float[audio.Length / 4]; Buffer.BlockCopy(audio, 0, samples, 0, audio.Length); for (int i = 0; i < samples.Length; ++i) { samples[i] = samples[i] * 0.5f; } print("Audio PlayBack"); print(samples.Length); source.clip.SetData(samples, 0); source.Play(); } else if (packetId == PacketId.UploadObjEvent) { var playerId = reader.ReadUInt32(); var size = reader.ReadInt32(); byte[] obj = reader.ReadBytes(size); if (playerId == _myPlayerId) { return; } print("Obj Received here"); m_root = Load(obj); } }
protected unsafe void listen() { ENet.Event e = new ENet.Event(); while (!end) // TODO : change { server.Service(TIMEOUT, out e); //Console.Out.WriteLine("Message received. Type : " + e.Type); switch (e.Type) { // needs more error handling case ENet.EventType.Connect: addClient(e.Peer); SendReliable(engine.getCurrentState(), NetFrame.FrameType.environment, e.Peer); break; case ENet.EventType.Disconnect: removeClient(e.Peer); break; case ENet.EventType.Receive: byte[] bytes = new byte[e.Packet.Length]; for (int i = 0; i < e.Packet.Length; i++) { bytes[i] = *((byte*)(e.Packet.Data.ToPointer())+i); } dispatchMessage(bytes, e.Peer); break; case ENet.EventType.None: break; } } }