HarmonyOS socketio使用demo

HarmonyOS
2024-12-25 18:15:57
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Excelsior_abit

请参考示例如下:

import prompt from '@ohos.promptAction';
import { client_socket } from '@ohos/socketio';
import router from '@ohos.router';

@Entry
@Component
struct Index {
  @State uri: string = "http://"
  @State username: string = "";
  @State message: string = "";
  @State connect_finish: boolean = false;
  @State login_finish: boolean = false;
  // private chatDetailData = new ChatDetailData();
  private client: client_socket = new client_socket();
  private scroller: Scroller = new Scroller();

  on_open(): void {
    console.log("SOCKET_IO_INDEX on_open");
    this.connect_finish = true;
    prompt.showToast({ message: "连接服务器成功" });
  }

  on_fail(): void {
    console.log("SOCKET_IO_INDEX on_fail");
  }

  on_reconnecting(): void {
    console.log("SOCKET_IO_INDEX on_reconnecting");
  }

  on_reconnect(): void {
    console.log("SOCKET_IO_INDEX on_reconnect");
  }

  on_close(reason: string): void {
    this.connect_finish = false;
    console.log("SOCKET_IO_INDEX on_close: " + reason);
  }

  on_socket_open(nsp: string): void {
    console.log("SOCKET_IO_INDEX on_socket_open: " + nsp);
  }

  on_socket_close(nsp: string): void {
    console.log("SOCKET_IO_INDEX on_socket_close: " + nsp);
  }

  on_login_listener(event_json: string): void {
    console.log("SOCKET_IO_INDEX on_login_listener: " + event_json);
    // let loginCall = JSON.parse(event_json);
    // let notice = "Welcome to Socket.IO Chat,there " + (loginCall.numUsers != 1 ? " are " : "\'s ") + loginCall.numUsers + (loginCall.numUsers != 1 ? " participants" : " participant");
    // let serviceMessage = { message: notice, id: 0 };
    // this.pushData(serviceMessage);
  }

  on_new_message_listener(event_json: string): void {
    console.log("SOCKET_IO_INDEX on_new_message_listener: " + event_json);
    // let messageCall = JSON.parse(event_json);
    // let serviceMessage = { username: messageCall.username, message: messageCall.message, id: 1 };
    // this.pushData(serviceMessage);
  }

  on_user_joined_listener(event_json: string): void {
    console.log("SOCKET_IO_INDEX on_user_joined_listener: " + event_json);
    // let userJoinCall = JSON.parse(event_json);
    // let notice = userJoinCall.username + " joined" + ",there" + (userJoinCall.numUsers != 1 ? " are " : "\'s ") + userJoinCall.numUsers + (userJoinCall.numUsers != 1 ? " participants" : " participant");
    // let serviceMessage = { message: notice, id: 0 };
    // this.pushData(serviceMessage);
  }

  on_user_left_listener(event_json: string): void {
    console.log("SOCKET_IO_INDEX on_user_left_listener: " + event_json);
    // let userLeftCall = JSON.parse(event_json);
    // let notice = userLeftCall.username + " left" + ",there" + (userLeftCall.numUsers != 1 ? "are " : "\'s ") + userLeftCall.numUsers + (userLeftCall.numUsers != 1 ? " participants" : " participant");
    // let serviceMessage = { message: notice, id: 0 };
    // this.pushData(serviceMessage);
  }

  on_emit_callback(emit_callback_json: string): void {
    console.log("SOCKET_IO_INDEX on_emit_callback: " + emit_callback_json);
  }

  pushData(any:ESObject) {
    setTimeout(() => {
      // this.chatDetailData.pushData(any);
    }, 300);
  }

  //配置client
  initClient(uri: string) {
    console.log("SOCKET_IO_INDEX initClient");
    this.client.set_open_listener(this.on_open.bind(this));
    this.client.set_fail_listener(this.on_fail.bind(this));
    this.client.set_reconnecting_listener(this.on_reconnecting.bind(this));
    this.client.set_reconnect_listener(this.on_reconnect.bind(this));
    this.client.set_close_listener(this.on_close.bind(this));
    this.client.set_socket_open_listener(this.on_socket_open.bind(this));
    this.client.set_socket_close_listener(this.on_socket_close.bind(this));
    this.client.connect(uri);
  }

  //配置socket
  initSocket() {
    console.log("SOCKET_IO_INDEX initSocket");
    // this.client.on("new message", this.on_new_message_listener.bind(this));
    // this.client.on("user joined", this.on_user_joined_listener.bind(this));
    // this.client.on("user left", this.on_user_left_listener.bind(this));
    // this.client.on("login", this.on_login_listener.bind(this));
  }

  //登录
  login(username: string) {
    console.log("SOCKET_IO_INDEX login");
    if (!this.connect_finish) {
      prompt.showToast({ message: "暂未连接服务器" });
      return;
    }
    this.client.emit("add user", username);
    this.login_finish = !this.login_finish;
    console.log("SOCKET_IO_INDEX login login_finish: " + this.login_finish);
  }

  //发送消息
  sendMessage(message: string) {
    console.log("SOCKET_IO_INDEX sendMessage");
    if (!this.connect_finish) {
      console.log("SOCKET_IO_INDEX 暂未连接服务器");
      return;
    }
    this.client.emit("new message", message, this.on_emit_callback);
  }

  //退出连接
  close() {
    console.log("SOCKET_IO_INDEX close");
    if (!this.connect_finish) {
      console.log("SOCKET_IO_INDEX 暂未连接服务器");
      return;
    }
    this.client.socket_close();
    this.client.close();
  }

  build() {
    Row() {
      Column() {
        if (this.login_finish) {
          Row() {
            TextInput({ placeholder: "请输入消息,退出聊天室请输入exit", text: this.message })
              .width('80%')
              .onChange((message) => {
                this.message = message
              })
            Button('Send')
              .onClick(() => {
                if (this.message == "exit") {
                  this.close()
                  this.login_finish = false
                } else if (this.message == "") {
                  prompt.showToast({ message: "请输入消息" });
                } else {
                  this.sendMessage(this.message)
                  let clientMessage: object = new Object(
                    { username: this.username, message: this.message, id: 2 }
                  )
                  this.pushData(clientMessage)
                  this.message = ""
                }
              })
              .width('20%')
          }
          .height('10%')
          .width('100%')
        } else {
          TextInput({ placeholder: "请输入socket.io服务端地址", text: this.uri })
            .onChange((uri) => {
              this.uri = uri
            })
          Button('Connect')
            .margin(20)
            .onClick(() => {
              this.initClient(this.uri)
              this.initSocket()
            })
          TextInput({ placeholder: "请输入用户名" })
            .onChange((username) => {
              this.username = username
            })
          Button('Login')
            .margin(20)
            .onClick(() => {
              this.login(this.username)
            })
          Button('进入自测界面')
            .margin(20)
            .onClick(() => {
              router.pushUrl({
                url: 'pages/MyTestPage'
              })
            })

        }
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Component
struct ChatItemView {
  private message: ESObject

  build() {
    Column() {
      if (this.message.id == 0) {
        Row() {
          Text(this.message.message)
        }
        .width("100%")
        .justifyContent(FlexAlign.Center)
        .margin({ top: 15 })
      }
      else if (this.message.id == 1) {
        // 聊天页面对方的消息
        Row() {
          Text(this.message.username + ":" + this.message.message)
        }
        .width("100%")
        .alignItems(VerticalAlign.Top)
        .margin({ top: 15 })
        .padding({ right: 50 })
      } else {
        // 聊天页面本人消息
        Row() {
          Text(this.message.username + ":" + this.message.message)
        }
        .alignItems(VerticalAlign.Top)
        .width("100%")
        .direction(Direction.Rtl)
        .padding({ left: 50 })
        .margin({ top: 15 })
      }
    }
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228.
  • 229.
  • 230.
  • 231.
  • 232.
  • 233.
  • 234.
  • 235.
  • 236.
  • 237.
  • 238.
  • 239.
  • 240.
  • 241.
  • 242.
  • 243.
  • 244.
  • 245.
  • 246.
分享
微博
QQ
微信
回复
2024-12-25 19:43:08
相关问题
HarmonyOS iconfont使用demo
829浏览 • 1回复 待解决
requestPermissionsFromUser使用Demo
2180浏览 • 1回复 待解决
HarmonyOS 消息通知使用示例demo
1233浏览 • 1回复 待解决
HarmonyOS 粘贴板如何使用Demo
774浏览 • 1回复 待解决
HarmonyOS 申请使用webview场景的demo
1208浏览 • 1回复 待解决
使用Web组件下载能力Demo
1264浏览 • 1回复 待解决
HarmonyOS 密钥库RSA算法的使用demo
616浏览 • 1回复 待解决
HarmonyOS web-view的使用以及demo
891浏览 • 1回复 待解决
使用文档中demo,获取不到font信息
2238浏览 • 1回复 待解决
使用华为账号DEMO需要应用上架么
1594浏览 • 1回复 待解决
HarmonyOS 曲线demo
742浏览 • 1回复 待解决
HarmonyOS 商城demo
608浏览 • 1回复 待解决
HarmonyOS 录制相关demo
676浏览 • 1回复 待解决
HarmonyOS 地区选择demo
640浏览 • 1回复 待解决
HarmonyOS TwoDimensionList Demo答疑
891浏览 • 1回复 待解决
HarmonyOS jsbridge功能demo
578浏览 • 1回复 待解决
HarmonyOS 自动重启demo
528浏览 • 1回复 待解决
HarmonyOS wifi连接demo
926浏览 • 1回复 待解决
HarmonyOS 缓存demo验证
530浏览 • 1回复 待解决