private void TryConnectLoop(object state) { NetworkState = NetworkStates.Connecting; Thread.Sleep(_settings.TimeToWaitForInitialConnect_ms); while (NetworkState == NetworkStates.Connecting) { try { var endPoint = _settings.Server.GetEndPoint(); _socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _socket.Connect(endPoint); if (_socket.Connected && NetworkState == NetworkStates.Connecting) { NetworkState = NetworkStates.Connected; Log.Info($"Connected to FadeCandy Server."); } else { CloseSocket(); } } catch (Exception e) { Log.Error($"Caught exception while trying to connect to FadeCandy server: {e}"); } if (NetworkState == NetworkStates.Connecting) { Thread.Sleep(_settings.ReconnectInterval_ms); } } }
public void SendData(string data, TransmitedDataType dataType) { if (connected) { try { if (dataType != TransmitedDataType.Unknown) { data = "C" + (int)dataType + data; } if (data.Length < BufferSize) { data = data.PadRight(BufferSize); } ASCIIEncoding asen = new ASCIIEncoding(); client.Send(asen.GetBytes(data)); networkError = null; } catch (Exception e) { networkError = e; State = NetworkStates.NetworkError; } } }
public void SendData(string data, TransmitedDataType dataType) { if (IsConnected) { try { if (dataType != TransmitedDataType.Unknown) { data = "C" + (int)dataType + data; } if (data.Length < BufferSize) { data = data.PadRight(BufferSize); } ASCIIEncoding asen = new ASCIIEncoding(); byte[] ba = asen.GetBytes(data); Console.WriteLine("Transmitting....."); connectionStream.Write(ba, 0, ba.Length); connectionStream.EndWrite(null); networkError = null; } catch (Exception e) { networkError = e; State = NetworkStates.NetworkError; } } }
public override void Connect(string ip, int port) { NetworkStates state = State; if (state == NetworkStates.Connecting || state == NetworkStates.Normal || state == NetworkStates.Disconnecting) { netHandler.OnOperationLog(NetworkOperations.Working, $"the network is working.({ip}:{port})"); return; } try { IPAddress ipAddress = IPAddress.Parse(ip); SocketAsyncEventArgs connectAsyncEvent = new SocketAsyncEventArgs() { RemoteEndPoint = new IPEndPoint(ipAddress, port), UserToken = netSocket, }; connectAsyncEvent.Completed += OnHandleSocketEvent; netSocket.ConnectAsync(connectAsyncEvent); State = NetworkStates.Connecting; netHandler.OnOperationLog(NetworkOperations.Connecting, $"Start connect to the server({ip}:{port})"); } catch { State = NetworkStates.ConnectedFailed; netHandler.OnOperationLog(NetworkOperations.ConnectedFailed, $"connected failed({ip}:{port})"); } }
internal void NotifyStatusChanged(NetworkStates state) { if (this.StatusChanged != null) { this.StatusChanged(this, state); } }
private void DoDisconnect() { if (sendAsyncEvent != null) { sendAsyncEvent.Completed -= OnHandleSocketEvent; sendAsyncEvent = null; } if (receiveAsyncEvent != null) { receiveAsyncEvent.Completed -= OnHandleSocketEvent; receiveAsyncEvent = null; } if (State == NetworkStates.Connecting || State == NetworkStates.Normal) { SocketAsyncEventArgs disconnectAsyncEvent = new SocketAsyncEventArgs(); disconnectAsyncEvent.Completed += OnHandleSocketEvent; State = NetworkStates.Disconnecting; netSocket.DisconnectAsync(disconnectAsyncEvent); } lock (sendingMessageStreamLocker) { sendingMessageStream.Clear(); } }
public void StartReceiving() { if (!connected) { return; } try { var readEvent = new AutoResetEvent(false); var recieveArgs = new SocketAsyncEventArgs() { UserToken = readEvent }; byte[] buffer = new byte[BufferSize]; recieveArgs.SetBuffer(buffer, 0, BufferSize); recieveArgs.Completed += recieveArgs_Completed; stopReceiver = false; do { client.ReceiveAsync(recieveArgs); readEvent.WaitOne();//Wait for recieve if (!IsConnected) { stopReceiver = true; } } while (!stopReceiver); recieveArgs.Completed -= recieveArgs_Completed; } catch (Exception e) { State = NetworkStates.NetworkError; networkError = e; SendData(State.ToString(), TransmitedDataType.Status); } }
void AcceptSocket(IAsyncResult result) { try { var server = ((TcpListener)result.AsyncState); client = ((TcpListener)result.AsyncState).EndAcceptSocket(result); Console.WriteLine("Connection accepted from " + client.RemoteEndPoint); connected = true; if (OnClientConnected != null) { OnClientConnected.Invoke(client); } State = NetworkStates.Connected; ClientState = NetworkStates.Connected; networkError = null; SendData(State.ToString(), TransmitedDataType.Status); if (AutoStart) { StartReceiving(); } } catch (Exception e) { State = NetworkStates.NetworkError; networkError = e; } }
void dataRead(IAsyncResult result) { byte[] buffer = result.AsyncState as byte[]; string data = ASCIIEncoding.ASCII.GetString(buffer, 0, buffer.Length); TransmitedDataType datatype = TransmitedDataType.Unknown; data = data.TrimEnd(); if (data.Length > 4 && data.StartsWith("C")) { datatype = data.StartsWith("C101") ? TransmitedDataType.Message : data.StartsWith("C102") ? TransmitedDataType.Status : data.StartsWith("C103") ? TransmitedDataType.Command : data.StartsWith("C104") ? TransmitedDataType.Headers : data.StartsWith("C105") ? TransmitedDataType.RawData : TransmitedDataType.Unknown; if (datatype == TransmitedDataType.Status) { var stateID = Enum.Parse(typeof(NetworkStates), data.Substring(4)); if (stateID is NetworkStates) { ServerState = (NetworkStates)stateID; if (ServerState == NetworkStates.Disconnected) { StopReceiving(); State = NetworkStates.Disconnected; ServerState = NetworkStates.Disconnected; connected = false; client.Close(); if (OnServerDisconnected != null) { OnServerDisconnected.Invoke(); } } // return; } } if (datatype != TransmitedDataType.Unknown) { data = data.Substring(4); } } latestReceivedData = data; if (OnDataReceived != null) { OnDataReceived.Invoke(data, datatype); } if (!stopReceiver) { buffer = new byte[BufferSize]; connectionStream.BeginRead(buffer, 0, BufferSize, dataRead, buffer); } }
public ClientModel(string IP = null, int port = 452, int bufferSize = 2000) { if (string.IsNullOrEmpty(IP)) { IP = LocalHost.MyLocalIPAddress(); } this.IP = IP; this.port = port; client = new TcpClient(); BufferSize = bufferSize; State = NetworkStates.Initialized; }
void recieveArgs_Completed(object sender, SocketAsyncEventArgs e) { TransmitedDataType datatype = TransmitedDataType.Unknown; var are = (AutoResetEvent)e.UserToken; are.Set(); latestReceivedData = ""; // for (int i = 0; i < e.BytesTransferred; i++) // latestReceivedData += Convert.ToChar(e.Buffer[i]); latestReceivedData = System.Text.Encoding.Default.GetString(e.Buffer).TrimEnd(); //latestReceivedData = latestReceivedData.TrimEnd(); if (latestReceivedData.Length > 4 && latestReceivedData.StartsWith("C")) { datatype = latestReceivedData.StartsWith("C101") ? TransmitedDataType.Message : latestReceivedData.StartsWith("C102") ? TransmitedDataType.Status : latestReceivedData.StartsWith("C103") ? TransmitedDataType.Command : latestReceivedData.StartsWith("C104") ? TransmitedDataType.Headers : latestReceivedData.StartsWith("C105") ? TransmitedDataType.RawData : TransmitedDataType.Unknown; if (datatype != TransmitedDataType.Unknown) { latestReceivedData = latestReceivedData.Substring(4); } if (datatype == TransmitedDataType.Status) { var stateID = Enum.Parse(typeof(NetworkStates), latestReceivedData); if (stateID is NetworkStates) { ClientState = (NetworkStates)stateID; if (ClientState == NetworkStates.Disconnected) { StopReceiving(); DropAndReset(); if (OnClientDisconnected != null) { OnClientDisconnected.Invoke(); } } // return; } } } if (OnDataReceived != null) { OnDataReceived.Invoke(latestReceivedData, datatype); } }
// Use this for initialization void Start () { audioManager = GameObject.Find ("AudioManager").GetComponent<AudioManager> (); audioManager.loopMenuMusic (); createRoomName = "Enter a Room Name"; username = "******"; email = "Email"; password = "******"; playfabUserID = string.Empty; FB.Init (SetInit, OnHideUnity); PlayFabSettings.TitleId = PLAYFAB_TITLE_ID; //PlayFabSettings.UseDevelopmentEnvironment = false; networkState = NetworkStates.NotLoggedIn; //PhotonNetwork.ConnectUsingSettings("0.1"); }
// Use this for initialization void Start() { audioManager = GameObject.Find("AudioManager").GetComponent <AudioManager> (); audioManager.loopMenuMusic(); createRoomName = "Enter a Room Name"; username = "******"; email = "Email"; password = "******"; playfabUserID = string.Empty; FB.Init(SetInit, OnHideUnity); PlayFabSettings.TitleId = PLAYFAB_TITLE_ID; //PlayFabSettings.UseDevelopmentEnvironment = false; networkState = NetworkStates.NotLoggedIn; //PhotonNetwork.ConnectUsingSettings("0.1"); }
public ServerModel(string IP = null, int port = 452, int bufferSize = 2000) { if (string.IsNullOrEmpty(IP)) { IP = LocalHost.MyLocalIPAddress(); } this.BufferSize = bufferSize; this.IP = IP; this.port = port; ipAd = IPAddress.Parse(IP); server = new TcpListener(ipAd, port); State = NetworkStates.Initialized; }
public void StopReceiving() { try { stopReceiver = true; connectionStream.EndRead(null); connectionStream.Flush(); connectionStream.Close(); } catch (Exception e) { networkError = e; State = NetworkStates.NetworkError; } }
private void btnClient_Click(object sender, EventArgs e) { //client = new ClientModel("127.0.0.1"); client = new ClientModel(); // client.OnConnectedToServer += Client_OnConnectedToServer; client.OnDataReceived += Client_OnDataRecived; while (!client.ConnectToServer()) { Thread.Sleep(100); } NetworkStates clientState = client.State; btnsendfromserver.Visible = false; btnServer.Visible = false; btnCloseServer.Visible = false; }
public void Disconnect() { if (connected) { stopReceiver = true; SendData(NetworkStates.Disconnected.ToString(), TransmitedDataType.Status); System.Threading.Thread.Sleep(2000); connected = false; server.Stop(); client = null; server = null; } State = NetworkStates.Disconnected; }
public void Disconnect() { if (connected) { try { State = NetworkStates.Disconnected; SendData(State.ToString(), TransmitedDataType.Status); System.Threading.Thread.Sleep(2000); StopReceiving(); client.Close(); connected = false; } catch (Exception e) { networkError = e; State = NetworkStates.NetworkError; } } }
public void StartReceiving() { if (!connected) { return; } try { stopReceiver = false; byte[] buffer = new byte[BufferSize]; connectionStream.BeginRead(buffer, 0, BufferSize, dataRead, buffer); networkError = null; } catch (Exception e) { networkError = e; State = NetworkStates.NetworkError; SendData(State.ToString(), TransmitedDataType.Status); } }
// ~ClientModel() //{ // if(connected) // { // StopReceiving(); // Disconnect(); // client = null; // } //} public bool ConnectToServer() { try { //commenting out this section since when connecting in a loop it throws exception becaue here we used iasyc //IAsyncResult ar = client.BeginConnect(IP, port, null, client); //bool result = ar.AsyncWaitHandle.WaitOne(1000, false); //if (!result || !client.Connected) //{ // State = NetworkStates.FailedToConnect; // return false; //} client.Connect(IP, port); // use the ipaddress as in the server program connectionStream = client.GetStream(); Console.WriteLine("Connected"); connected = true; if (OnConnectedToServer != null) { OnConnectedToServer.Invoke(client.Client); } State = NetworkStates.Connected; ServerState = NetworkStates.Connected; networkError = null; SendData(State.ToString(), TransmitedDataType.Status); if (AutoStart) { StartReceiving(); } return(true); } catch (System.Net.Sockets.SocketException sockEx) { networkError = sockEx; State = NetworkStates.NetworkError; } return(false); }
private void OnGUI () { GUI.Label (ResizeGUI(new Rect (10, 10, 500, 30)), PhotonNetwork.connectionStateDetailed.ToString ()); if (!PhotonNetwork.connected) networkState = NetworkStates.NotLoggedIn; else if (PhotonNetwork.room == null) networkState = NetworkStates.InLobby; else if (PhotonNetwork.room != null) networkState = NetworkStates.InRoom; else networkState = NetworkStates.Unknown; // Network state machine switch (networkState) { case NetworkStates.NotLoggedIn: { /* if (GUI.Button (new Rect (10, 10, 150, 70), "Login to Facebook")) { FB.Login ("email", LoginCallback); } */ if (hasError) { StartCoroutine("waitForError"); GUIStyle myStyle = new GUIStyle (); myStyle.fontSize = 36; GUI.Label (ResizeGUI(new Rect (10, 50, 200, 20)), myErrorMessage, myStyle); } username = GUI.TextField (ResizeGUI(new Rect (10, 100, 200, 20)), username); email = GUI.TextField (ResizeGUI(new Rect (10, 130, 200, 20)), email); password = GUI.PasswordField (ResizeGUI(new Rect (10, 160, 200, 20)), password, '*'); if (GUI.Button (ResizeGUI(new Rect (10, 210, 150, 30)), "Create Account")) { audioManager.playClick(); RegisterPlayFabUserRequest request = new RegisterPlayFabUserRequest (); request.TitleId = PlayFabSettings.TitleId; request.Username = username; request.Email = email; request.Password = password; PlayFabClientAPI.RegisterPlayFabUser (request, OnPlayFabRegisterSuccess, OnPlayFabError); } if (GUI.Button (ResizeGUI(new Rect (10, 250, 150, 30)), "Login with Username")) { audioManager.playClick(); LoginWithPlayFabRequest request = new LoginWithPlayFabRequest (); request.Username = username; request.Password = password; request.TitleId = PlayFabData.TitleId; PlayFabClientAPI.LoginWithPlayFab (request, OnPlayFabLoginSuccess, OnPlayFabError); } if (GUI.Button (ResizeGUI(new Rect (10, 290, 150, 30)), "Login with Email")) { audioManager.playClick(); LoginWithEmailAddressRequest request = new LoginWithEmailAddressRequest(); request.Email = email; request.Password = password; request.TitleId = PlayFabData.TitleId; PlayFabClientAPI.LoginWithEmailAddress(request, OnPlayFabLoginSuccess, OnPlayFabError); } break; } case NetworkStates.InLobby: { if (joinedRoom) { GameObject board = GameObject.Find("Board"); Destroy(board); audioManager.source.Stop(); audioManager.loopMenuMusic(); background.SetActive(true); title.SetActive(true); turnManager.currentPlayer = 0; // resets game when you leave turnManager.gameOver = false; turnManager.gameStarted = false; turnManager.movesPerTurn = 2; GameObject go = GameObject.FindGameObjectWithTag ("Canvas"); ActionMenu actionMenu = (ActionMenu)go.transform.FindChild ("ActionMenu(Clone)").GetComponent<ActionMenu>(); actionMenu.DestroyActionMenu(); joinedRoom = false; } inRoom = false; createRoomName = GUI.TextField (ResizeGUI(new Rect (10, 110, 150, 30)), createRoomName); // Create game button if (GUI.Button (ResizeGUI(new Rect (10, 50, 150, 50)), "Create Game")) { audioManager.playClick(); Debug.Log ("room name = " + createRoomName); PhotonNetwork.CreateRoom (createRoomName, true, true, 5); } // Join existing game button if (roomsList != null) { for (int i = 0; i < roomsList.Length; i++) { if (GUI.Button (ResizeGUI(new Rect (10, 180 + (80 * i), 150, 70)), "Join " + roomsList [i].name)) { audioManager.playClick(); PhotonNetwork.JoinRoom (roomsList [i].name); } } } break; } case NetworkStates.InRoom: // in room so instantiate player { inRoom = true; GUILayout.Label ("Your name: " + PhotonNetwork.playerName + " - " + playfabUserID ); GUILayout.Label (PhotonNetwork.playerList.Length + " players in this room."); GUILayout.Label ("The others are:"); foreach (PhotonPlayer player in PhotonNetwork.otherPlayers) { GUILayout.Label (player.ToString ()); } if (GUI.Button (ResizeGUI(new Rect (10, 70, 150, 30)), "Leave")) { audioManager.playClick(); PhotonNetwork.LeaveRoom (); } break; } case NetworkStates.Unknown: { GUILayout.Label ("Unknown network state!"); break; } } if (PhotonNetwork.connected && !inRoom) { if (GUI.Button (ResizeGUI(new Rect (10, Screen.height - 70, 150, 30)), "Logout")) { audioManager.playClick(); if (FB.IsLoggedIn) FB.Logout (); PhotonNetwork.Disconnect (); } } }
private void OnGUI() { GUI.Label(ResizeGUI(new Rect(10, 10, 500, 30)), PhotonNetwork.connectionStateDetailed.ToString()); if (!PhotonNetwork.connected) { networkState = NetworkStates.NotLoggedIn; } else if (PhotonNetwork.room == null) { networkState = NetworkStates.InLobby; } else if (PhotonNetwork.room != null) { networkState = NetworkStates.InRoom; } else { networkState = NetworkStates.Unknown; } // Network state machine switch (networkState) { case NetworkStates.NotLoggedIn: { /* * if (GUI.Button (new Rect (10, 10, 150, 70), "Login to Facebook")) { * FB.Login ("email", LoginCallback); * } */ if (hasError) { StartCoroutine("waitForError"); GUIStyle myStyle = new GUIStyle(); myStyle.fontSize = 36; GUI.Label(ResizeGUI(new Rect(10, 50, 200, 20)), myErrorMessage, myStyle); } username = GUI.TextField(ResizeGUI(new Rect(10, 100, 200, 20)), username); email = GUI.TextField(ResizeGUI(new Rect(10, 130, 200, 20)), email); password = GUI.PasswordField(ResizeGUI(new Rect(10, 160, 200, 20)), password, '*'); if (GUI.Button(ResizeGUI(new Rect(10, 210, 150, 30)), "Create Account")) { audioManager.playClick(); RegisterPlayFabUserRequest request = new RegisterPlayFabUserRequest(); request.TitleId = PlayFabSettings.TitleId; request.Username = username; request.Email = email; request.Password = password; PlayFabClientAPI.RegisterPlayFabUser(request, OnPlayFabRegisterSuccess, OnPlayFabError); } if (GUI.Button(ResizeGUI(new Rect(10, 250, 150, 30)), "Login with Username")) { audioManager.playClick(); LoginWithPlayFabRequest request = new LoginWithPlayFabRequest(); request.Username = username; request.Password = password; request.TitleId = PlayFabData.TitleId; PlayFabClientAPI.LoginWithPlayFab(request, OnPlayFabLoginSuccess, OnPlayFabError); } if (GUI.Button(ResizeGUI(new Rect(10, 290, 150, 30)), "Login with Email")) { audioManager.playClick(); LoginWithEmailAddressRequest request = new LoginWithEmailAddressRequest(); request.Email = email; request.Password = password; request.TitleId = PlayFabData.TitleId; PlayFabClientAPI.LoginWithEmailAddress(request, OnPlayFabLoginSuccess, OnPlayFabError); } break; } case NetworkStates.InLobby: { if (joinedRoom) { GameObject board = GameObject.Find("Board"); Destroy(board); audioManager.source.Stop(); audioManager.loopMenuMusic(); background.SetActive(true); title.SetActive(true); turnManager.currentPlayer = 0; // resets game when you leave turnManager.gameOver = false; turnManager.gameStarted = false; turnManager.movesPerTurn = 2; GameObject go = GameObject.FindGameObjectWithTag("Canvas"); ActionMenu actionMenu = (ActionMenu)go.transform.FindChild("ActionMenu(Clone)").GetComponent <ActionMenu>(); actionMenu.DestroyActionMenu(); joinedRoom = false; } inRoom = false; createRoomName = GUI.TextField(ResizeGUI(new Rect(10, 110, 150, 30)), createRoomName); // Create game button if (GUI.Button(ResizeGUI(new Rect(10, 50, 150, 50)), "Create Game")) { audioManager.playClick(); Debug.Log("room name = " + createRoomName); PhotonNetwork.CreateRoom(createRoomName, true, true, 5); } // Join existing game button if (roomsList != null) { for (int i = 0; i < roomsList.Length; i++) { if (GUI.Button(ResizeGUI(new Rect(10, 180 + (80 * i), 150, 70)), "Join " + roomsList [i].name)) { audioManager.playClick(); PhotonNetwork.JoinRoom(roomsList [i].name); } } } break; } case NetworkStates.InRoom: // in room so instantiate player { inRoom = true; GUILayout.Label("Your name: " + PhotonNetwork.playerName + " - " + playfabUserID); GUILayout.Label(PhotonNetwork.playerList.Length + " players in this room."); GUILayout.Label("The others are:"); foreach (PhotonPlayer player in PhotonNetwork.otherPlayers) { GUILayout.Label(player.ToString()); } if (GUI.Button(ResizeGUI(new Rect(10, 70, 150, 30)), "Leave")) { audioManager.playClick(); PhotonNetwork.LeaveRoom(); } break; } case NetworkStates.Unknown: { GUILayout.Label("Unknown network state!"); break; } } if (PhotonNetwork.connected && !inRoom) { if (GUI.Button(ResizeGUI(new Rect(10, Screen.height - 70, 150, 30)), "Logout")) { audioManager.playClick(); if (FB.IsLoggedIn) { FB.Logout(); } PhotonNetwork.Disconnect(); } } }
private void DeInitializeNetworking() { NetworkState = NetworkStates.ShuttingDown; CloseSocket(); }
public void AcceptConnection() { server.Start(); State = NetworkStates.WaitingForConnection; server.BeginAcceptSocket(AcceptSocket, server); }