public static void SendDisconnect(Player mSocket, string reason) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(Packet.Disconnected); writer.Write(reason); //======================================================================================\\ mSocket.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } }
void Response(Player mSocket, Packet packetToResponse, SendTo send, object[] response) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(Packet.Database); writer.WritePacket(packetToResponse); writer.Write(response.Serialize()); //========================================================================================\\ mSocket.Send(send, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } }
protected static byte[] DBLogin(string user, string pass) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(Packet.Database); writer.WritePacket(Packet.Login); writer.Write(user); writer.Write(pass); return(writer.GetBuffer()); } }
public static void SendErrorMessage(Player mSocket, Packet packet, string message) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(Packet.Fail); writer.WritePacket(packet); writer.Write(message); //========================================================\\ mSocket.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } }
protected void HandleCreateRoom(Player mSender, Packet mCommand, string roomName, int maxPlayers, string Password, bool isVisible, bool JoinOrCreate, byte[] options) { try { if (mSender.IsInChannel() && !mSender.IsInRoom()) { Room nRoom = new Room(roomID, roomName, maxPlayers, string.IsNullOrEmpty(Password), isVisible, options); //======================================================================================================= void CreateRoom() { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(mCommand); writer.Write(nRoom.Serialize()); mSender.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } //========================================================= serverChannels[mSender.currentChannel]._rooms.Add(nRoom); //========================================================= Player _player = tcpPlayers[mSender.tcpClient]; _player.currentRoom = roomID; tcpPlayers[mSender.tcpClient] = _player; //========================================================= roomID++; } if (!JoinOrCreate) { CreateRoom(); } else { if (!serverChannels[mSender.currentChannel]._rooms.Any(x => x.roomName == roomName)) { CreateRoom(); } else { HandleJoinRoom(mSender, Packet.JoinRoom, roomID); } } } else { SendErrorMessage(mSender, mCommand, "ERROR: You cannot create a room by being inside one. Call LeaveRoom or you not within a channel"); } } catch { Debug.LogError("Corrupted Bytes"); } }
protected void HandleConfirmation(Player mSocket, Packet mCommand) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(mCommand); writer.Write("Status: OK"); writer.Write(mSocket.ID); mSocket.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, (ia) => { if (mSocket.EndSend(ia)) { } }); } }
public static void SendProperties(Player player, NeutronSyncBehaviour properties, SendTo sendTo, Broadcast broadcast) { NeutronSyncBehaviour _properties = properties; //=======================================================\\ string props = JsonUtility.ToJson(_properties); //=======================================================\\ using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(Packet.playerProps); writer.Write(player.ID); writer.Write(props); player.Send(sendTo, writer.GetBuffer(), broadcast, null, ProtocolType.Tcp, null, null); } }
protected void HandleSendChat(Player mSender, Packet mCommand, Broadcast broadcast, string message) { try { using (NeutronWriter writer = new NeutronWriter()) { Player pSender = mSender; writer.WritePacket(mCommand); writer.Write(message); writer.Write(pSender.Serialize()); //==============================================================================================\\ mSender.Send(SendTo.All, writer.GetBuffer(), broadcast, null, ProtocolType.Tcp, null, null); } } catch { Debug.LogError("Corrupted Bytes"); } }
protected void HandleGetCached(Player mSender, CachedPacket packetToSendCache) { List <byte[]> iP = new List <byte[]>(); //========================================================\\ if (packetToSendCache == CachedPacket.ResyncInstantiate) { foreach (var _ps in playersState.Values) { if (_ps._Player.Equals(mSender)) { continue; } if (_ps._Player.currentChannel == mSender.currentChannel) { using (NeutronWriter writer = new NeutronWriter()) { writer.Write(_ps.lastPosition); writer.Write(_ps.lastRotation); writer.Write(_ps._prefabName); writer.Write(_ps._Player.Serialize()); //========================================================\\ iP.Add(writer.GetBuffer()); } } else { continue; } } OnEndBuffer(); } void OnEndBuffer() { if (iP.Count > 0) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(CachedPacket.ResyncInstantiate); writer.Write(iP.ToArray().Serialize()); //=============================================================================\\ mSender.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } } } }
protected static void SendRPC(NeutronObject mThis, int RPCID, ValidationPacket validationType, object[] parameters, SendTo sendTo, bool cached, ProtocolType protocolType, Broadcast broadcast) { using (NeutronWriter writer = new NeutronWriter()) { object[] bArray = { mThis.Infor.ownerID, parameters }; //==========================================================================================================// writer.WritePacket(Packet.RPC); writer.WritePacket(broadcast); writer.Write(RPCID); writer.WritePacket(sendTo); writer.WritePacket(validationType); writer.Write(cached); writer.Write(bArray.Serialize()); //==========================================================================================================// Send(writer.GetBuffer(), protocolType); } }
protected void HandleDestroyPlayer(Player mSender, Packet mCommand) { if (playersState.TryRemove(mSender.tcpClient, out PlayerState removedState)) { PlayerState obj = removedState; //=======================================================\\ Enqueue(() => Destroy(obj.gameObject), ref monoBehaviourActions); //=======================================================\\ using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(mCommand); mSender.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } onPlayerDestroyed(mSender); } else { SendErrorMessage(mSender, mCommand, "ERROR: Player already destroyed!"); } }
protected void HandleGetRooms(Player mSender, Packet mCommand) { try { if (mSender.IsInChannel() && !mSender.IsInRoom()) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(mCommand); writer.Write(serverChannels[mSender.currentChannel]._rooms.ToArray().Serialize()); mSender.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } } else { SendErrorMessage(mSender, mCommand, "WARNING: You already in channel?/or/You are trying to get rooms from within a room, this function is not necessarily prohibited, you can change the behavior on the server, but it is not recommended to obtain the list of rooms within a room, in order to save bandwidth."); } } catch { Debug.LogError("Corrupted Bytes"); } }
protected void HandleNickname(Player mSender, string Nickname) { if (tcpPlayers.TryGetValue(mSender.tcpClient, out Player oldValue)) { mSender.Nickname = Nickname; if (tcpPlayers.TryUpdate(mSender.tcpClient, mSender, oldValue)) { using (NeutronWriter writer = new NeutronWriter()) { writer.WritePacket(Packet.Nickname); //======================================================================================\\ mSender.Send(SendTo.Only, writer.GetBuffer(), Broadcast.None, null, ProtocolType.Tcp, null, null); } } else { SendErrorMessage(mSender, Packet.Nickname, "ERROR: Failed to Change Nickname"); } } }