Java server RedDwarf (бывший DarkStar) и Unity3D [РЕШЕНО]

Сеть в Unity3D

Java server RedDwarf (бывший DarkStar) и Unity3D [РЕШЕНО]

Сообщение Gexon 09 фев 2013, 02:15

Java server на RedDwarf (бывший DarkStar) и Unity3D.

Уважаемые программисты, скажите пожалуйста, кто нибудь сталкивался с подключением RedDwarf к Unity3D?
Если такие есть, то отпишитесь пожалуйста.

Нашел на англ языке, для Unity существует Unity API's for Red Dwarf http://forum.unity3d.com/threads/153612 ... with-Unity
Это какой-то пакет Unity Package, могу ли я использовать, подключать этот пакет в бесплатной версии? [unity 3D]
Последний раз редактировалось Gexon 27 фев 2013, 13:04, всего редактировалось 3 раз(а).
Аватара пользователя
Gexon
UNец
 
Сообщения: 3
Зарегистрирован: 09 фев 2013, 01:41

Re: Java server на RedDwarf (бывший DarkStart) и Unity3D

Сообщение DbIMok 10 фев 2013, 02:41

зависит от содержимого пакета. но попробовать можно. viewtopic.php?f=14&t=605
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Java server на RedDwarf (бывший DarkStart) и Unity3D

Сообщение Gexon 10 фев 2013, 20:56

Для тех кто хочет связать сервер на java RedDwarf (DarkStar):
Использую бесплатную версию Unity.

1. Скачать плагин на Unity (http://sourceforge.net/apps/trac/reddwa ... itypackage). Импортировать в Unity. В ассетах должен появиться "DarkstarSharp".

2. В файле "SimpleSgsProtocol.cs" из папки со скриптами "DarkstarSharp", необходимо изменить версию протокола,
значение VERSION = 0x04; меняем на 0x05;

3. Создаем папку для наших скриптов и создаем csharp скрипт "Messages.cs" следующего содержания:
Синтаксис:
Используется csharp
using UnityEngine;
using System;
using System.Text;
using System.Collections;

public class Messages {

    public static byte[] encodeString(String s) {              
        return Encoding.ASCII.GetBytes(s);
    }

    public static String decodeString(byte[] message) {        
        return ASCIIEncoding.ASCII.GetString(message);
        }
}
 


4. Создаем csharp скрипт "ConnectToRedDwarf.cs" с таким содержимым:
Синтаксис:
Используется csharp
using UnityEngine;
using System;
using System.Text;
using System.Collections;
using DarkstarSharp;

public class RedDwarfClient : SimpleClientListener {
        private SimpleClient simpleClient;
        private ConnectToRedDwarf connectRD;
        private String host;
    private String username;    
       
        public RedDwarfClient(String host, String username, ConnectToRedDwarf connectRD) {                             
                this.host = host;
                this.username = username;
                this.connectRD = connectRD;
                simpleClient = new SimpleClient(this);
        }
       
        public void LoggedIn(byte[] reconnectKey){
                connectRD.loggedIn();
        }
       
    public void LoginFailed(String reason){
                connectRD.setStatus("login failed " + username+": "+reason);           
        }
       
        public void SendMessage(String s){             
                try {
            simpleClient.WriteMessage(Messages.encodeString(s));
        } catch (Exception e) {
            connectRD.setStatus(e.Message.ToString());
        }
        }
       
    public void ReceivedMessage(byte[] message){                 
                connectRD.receivedMessage(Messages.decodeString(message));
        }
       
    public void Disconnected(bool forced, String message){             
                connectRD.disconnected(username, message);
        }
       
    public PasswordAuthentication GetPasswordAuthentication(){
                return new PasswordAuthentication(username, "");
        }
       
    public ClientChannelListener JoinedChannel(ClientChannel channel){         
                return null;;          
        }
       
        public Boolean login() {
                Boolean result = true;
        try {            
            simpleClient.login(host, 62964);
        } catch (Exception e) {
            connectRD.setStatus("cannot login" + username+": "+e.Message.ToString());
                        result = false;
        }
                return result;
    }  
       
        public void LogOff(){
                simpleClient.Logout(false);
        }
}      

public class ConnectToRedDwarf : MonoBehaviour {       
        private RedDwarfClient client;
        Boolean onConnect = false;
        String serverIP = "127.0.0.1";
        String clientName = "Unity";
        string status = "Not connection";

        // Use this for initialization (Выполняется один раз, при запуске)
        void Start () {                        
               
        }
       
        // Update is called once per frame (Выполняется регулярно, каждый раз при отрисовке кадра)
        void Update () {
       
        }
       
        void OnGUI() {
                if (!onConnect) {
                        //renderer.material.color = Color.blue;
                GUI.BeginGroup(new Rect(Screen.width/2-150, Screen.height/2-200, 300, 400));
                GUI.Box(new Rect(0, 0, 300, 400), "Connect to Server");        
                serverIP = GUI.TextField(new Rect(100,90,100,20), serverIP);
                        clientName = GUI.TextField(new Rect(100,120,100,20), clientName);
                        //Подключение к серверу                                     
                if (GUI.Button(new Rect(100, 150, 100, 20), "Connect")){
                                client = new RedDwarfClient(serverIP, clientName, this);                               
                                onConnect = client.login();
                        }                      
                        GUI.Label(new Rect(100,180,200,20), status);
                //Закрыть окно
                if (GUI.Button(new Rect(100, 360, 100, 20), "Close"))
                {                  
                //    renderer.material.color = Color.white;
                }
                GUI.EndGroup();
                } else {
                        GUI.BeginGroup(new Rect(Screen.width/2-150, Screen.height/2-200, 300, 400));
                GUI.Box(new Rect(0, 0, 300, 400), "Connection Status");                                        
                serverIP = GUI.TextField(new Rect(100,90,100,20), serverIP);
                        clientName = GUI.TextField(new Rect(100,120,100,20), clientName);
                        if (GUI.Button(new Rect(100, 150, 100, 20), "Drop connection")){
                                client.LogOff();
                                onConnect = false;
                        }                      
                        GUI.Label(new Rect(100,180,200,20), status);
                //Закрыть окно
                if (GUI.Button(new Rect(100, 360, 100, 20), "Close"))
                {                  
                //    renderer.material.color = Color.white;
                }
                GUI.EndGroup();
                }
        }
       
        public void loggedIn(){ // делаем что-то при подключении к серверу
                status = "Logined";
        }
       
        public void setStatus(String status){ // устанавливаем новое состояние (отображаем в GUI)
                this.status = status;
        }
       
        public void move(String pos){} // перемещаем наш объект
       
        public void endGame(String game){ // конец игры
                status = game;
        }
       
        public void disconnected(String username, String message){ // обрыв соединения с сервером
                this.setStatus("Lost connection: "+message);
                onConnect = false;
        }
       
        public void receivedMessage(String msg){
                if (msg.StartsWith("MOVE")) {
            move(msg);
        } else if (msg.StartsWith("END")) {
            endGame(msg);
        }              
        }
       
        public void play(){ // логика игры
                client.SendMessage("PLAY");
        }              
}
 


5. В нашей сцене создаем пустой объект и кидаем на него скрипт "ConnectToRedDwarf.cs". Запускаем на выполнение и наблюдем меню где нужно ввести адрес сервера логин. В общем разберетесь)

Послесловие:
Содержимое файла "Messages.cs" взято с официального сайта, и немного подретушировано под сишарп.
Содержимое файла "ConnectToRedDwarf.cs" вычленено с различных источников плюс плод моего воображения.
Проверил, работает. (c#)
Аватара пользователя
Gexon
UNец
 
Сообщения: 3
Зарегистрирован: 09 фев 2013, 01:41


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3