- Home /
CSharp network script error
I am trying to make a mmorpg and i am using the tutorials of unity3d wiki but the logingui script has errors in it! HELP ME!!!
THE ERROR IS: 174.13 CS1520 error class struct or interface method must have a return type
this is the code:
using UnityEngine; using System; using System.Collections; // for using hash tables using System.Security.Permissions; // for getting the socket policy using SmartFoxClientAPI; // to setup SmartFox connection using SmartFoxClientAPI.Data; // necessary to access the room resource
public class gui_Login : MonoBehaviour {
// smartFox variables
private SmartFoxClient smartFox;
private string serverIP = "127.0.0.1";
private int serverPort = 9339; // default = 9339
public string zone = "city";
public bool debug = true;
// variables used in script
private string statusMessage = "";
private string username = "";
void Awake() {
Application.runInBackground = true; // Let the application be running while the window is not active.
// Create SmartFox connection if not already available
if ( SmartFox.IsInitialized() ) {
Debug.Log("SmartFox is already initialized, reusing connection");
smartFox = SmartFox.Connection;
} else {
if( Application.platform == RuntimePlatform.WindowsWebPlayer ) {
// Only set this for the webplayer, it breaks pc standalone
// See http://answers.unity3d.com/questions/25122/ for details
Security.PrefetchSocketPolicy(serverIP, serverPort);
}
try {
Debug.Log("Starting new SmartFoxClient");
smartFox = new SmartFoxClient(debug);
smartFox.runInQueueMode = true;
} catch ( Exception e ) {
Debug.Log(e.ToString());
}
}
// Register callback delegates, before callling Connect()
SFSEvent.onConnection += OnConnection;
SFSEvent.onConnectionLost += OnConnectionLost;
SFSEvent.onLogin += OnLogin;
SFSEvent.onRoomListUpdate += OnRoomList;
SFSEvent.onDebugMessage += OnDebugMessage;
//SFSEvent.onJoinRoom += OnJoinRoom; // We will not join a room in this level
Debug.Log("Attempting to connect to SmartFoxServer");
smartFox.Connect(serverIP, serverPort);
}
void FixedUpdate() {
smartFox.ProcessEventQueue();
}
void OnGUI() {
// server IP in bottom left corner
GUI.Label(new Rect(10, Screen.height-25, 200, 24), "Server: " + serverIP);
// quit button in bottom right corner
if ( Application.platform != RuntimePlatform.WindowsWebPlayer ) {
if ( GUI.Button(new Rect(Screen.width-150, Screen.height - 50, 100, 24), "Quit") ) {
smartFox.Disconnect();
UnregisterSFSSceneCallbacks();
Application.Quit();
}
}
// Show login fields if connected and reconnect button if disconnect
if (smartFox.IsConnected()) {
GUI.Label(new Rect(10, 116, 100, 100), "Username: ");
username = GUI.TextField(new Rect(100, 116, 200, 20), username, 25);
if ( GUI.Button(new Rect(100, 166, 100, 24), "Login") || (Event.current.type == EventType.keyDown && Event.current.character == '\n')) {
smartFox.Login(zone, username, "");
}
} else {
if ( GUI.Button(new Rect(100, 166, 100, 24), "Reconnect") || (Event.current.type == EventType.keyDown && Event.current.character == '\n')) {
Application.LoadLevel("sc_City");
}
}
// Draw box for status messages, if one is given
// Contains some logic to parse message of multiple lines if necessary
if (statusMessage.Length > 0)
{
int boxLength = 61; // define length of status box
int messageLength = statusMessage.Length; // get length of status message
string originalMessage = statusMessage; // copy message in to work string
string formattedMessage = ""; // define output message string
int i = 0;
while (i + boxLength < messageLength) // iterate and add newline until over length
{
formattedMessage = formattedMessage + originalMessage.Substring(i,boxLength) + "\n";
i = i + boxLength;
}
// add last piece of original message
formattedMessage = formattedMessage + originalMessage.Substring(i, boxLength - (i + boxLength - messageLength));
// draw status box with message
GUI.Box (new Rect (Screen.width - 420,10,400,48), formattedMessage);
}
}
private void UnregisterSFSSceneCallbacks() {
// This should be called when switching scenes, so callbacks from the backend do not trigger code in this scene
SFSEvent.onConnection -= OnConnection;
SFSEvent.onConnectionLost -= OnConnectionLost;
SFSEvent.onLogin -= OnLogin;
SFSEvent.onRoomListUpdate -= OnRoomList;
SFSEvent.onDebugMessage -= OnDebugMessage;
//SFSEvent.onJoinRoom -= OnJoinRoom;
}
void OnConnection(bool success, string error) {
if ( success ) {
SmartFox.Connection = smartFox;
statusMessage = "Connected to SmartFox Server";
Debug.Log(statusMessage);
} else {
statusMessage = "Can't connect! " + error;
Debug.Log(statusMessage);
}
}
void OnConnectionLost() {
statusMessage = "Connection lost / no connection to server";
}
public void OnDebugMessage(string message) {
Debug.Log("[SFS DEBUG] " + message);
}
public void OnLogin(bool success, string name, string error) {
if ( success ) {
statusMessage = "Login for user \"" + name + "\" successful.";
// Lets wait for the room list
} else {
// Login failed - lets display the error message sent to us
statusMessage = "Login error: " + error;
}
}
/*
// We will not join a room in this level, the NetworkController in the next scene will take care of that void OnJoinRoom(Room room) { Debug.Log("Room " + room.GetName() + " joined successfully"); smartFox.SendPublicMessage(smartFox.myUserName + " has joined"); // We can now move on to the next level UnregisterSFSSceneCallbacks(); Application.LoadLevel("sc_City"); }
/
void OnRoomList(Hashtable roomList) {
try {
foreach (int roomId in roomList.Keys) {
Room room = (Room)roomList[roomId];
if (room.IsPrivate()) {
Debug.Log("Room id: " + roomId + " has name: " + room.GetName() + "(private)");
}
Debug.Log("Room id: " + roomId + " has name: " + room.GetName());
}
// Users always have to be in a room, but we'll do that in the next level
/*
if (smartFox.GetActiveRoom() == null) {
smartFox.JoinRoom("Central Square");
}*/
UnregisterSFSSceneCallbacks();
Application.LoadLevel("sc_City");
}
catch (Exception e) {
Debug.Log("Room list error: "+e.Message+" "+e.StackTrace);
}
}
}
You should include the error message. I don't think anyone will read that much code to find an error for you without any hint about what your actual problem is...
Answer by Ray-Pendergraph · May 31, 2011 at 12:14 PM
It looks like the problem is in the only part of the post that the syntax parser goofed up when you posted. There appears to be a method in all that called OnJoinRoom(Room room). In C# methods necessarily have a return type, thus the error message : "class struct or interface method must have a return type" that should be changed to
void OnJoinRoom(Room room){...
If that's not the issue then there is another method somewhere else, maybe in another class. This is a compile time error that typically comes with a lot of indication where the problem is. Maybe you could post the entire compiler output.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Conversion help - c# to javacript 1 Answer
How do clients Use 'NetworkServer.Spawn ();'? 1 Answer
WWW with https resulting in SSL: couldn't create a context 0 Answers